您的位置:首页 > 产品设计 > UI/UE

vector list deque

2016-06-30 22:27 316 查看
说明:

1.list由双向链表实现的,不支持[]和at()函数,有较快的插入和删除函数,同时提供了sort,remove,remove_if ,reverse,merge,splice,unique等独有的函数

2.deque也是动态数组实现的,和vector相比可以push_front,push_back,pop_front,pop_back;deque和list都没有capacity()和reserve函数,不支持内存重分配机制;deque插入删除元素很慢;

vector

list

deque

头文件

<vector>

<list>

<deque>

定义及初始化

vector<string> myvt;

myvt.push_back(“123”)

list<int>list1;

list<int>list1(10);

list<int>list1(10,1);

list<int>list2(list1);

list<int>list3(list2.begin(),list.end());

list<int>list4.assign(list3.begin(),list3.end()) 重置元素

deque<int> dq;

deque<int>dq(10);

deque<int>(10,3);

deque<int>dq(dq1)

deque<int>dq(dq1.begin(),dq1.end())

dq.assign(dq2.begin(),dq2.end());

dq.assign(5,4);

容量

1)myvt.size();

实际元素的多少

2)myvt.capacity();

实际能容那的最多元素,测试好像与size相同

3)myvt.max_size();

最大元素个数

4)myvt.resize();

修改容器大小,同时改变size()和capacity()的大小

5)myvt.reserve();

预设容器容量

改变的capacity()大小

list1.size();实际元素多少

list1.max_size();最大允许容量

list1.resize();调整容量大小

dq.size()

deque.resize(n,x)

调整为n,元素为x

(只有vector和deque可以这样调整)

dq.max_size()最大容量

是否为空

myvt.empty()

myvt.clear() 清空

List1.empty()

List1.clear()

dq.empty()

遍历

cout<<myvt.at(i);

迭代器遍历

Cout<<*it;

算法:for_each

void out(int a)

{

cout << a;

}

for_each(myvt.begin(),myvt.end(),out)

同理

提供[]和at()

允许

dq[i]=10;

元素访问

1) myvt.at(i)

2) myvt[i]

3) myvt.front() 第一个元素

4) myvt.back()最后一个元素

没有at 和[] 访问数据的功能

List1.front();

List1.back();

1)提供[]和at()

允许dq[i]=10;

2)dq.front();

3)dq.back();

迭代器

1) begin() 第一个元素

2) end()最后一个元素的下一个位置

3) rbegin()逆向第一个元素

4) rend()逆向最后一个元素的下一个位置

查找

vector没有find函数

vector<int>::iterator it;

it=find(myvt.begin(), myvt.end(), 3); cout << *it;

返回迭代器

参数:

1) 开始

2) 结束

3) 查找目标

没有find函数

没有find函数

排序

bool compare(int &m, int &n)

{

return m>n;//从大到小

}

sort(myvt.begin(),myvt.end(),compare)

compare函数定义排序的方向

list.sort() 从小到大排序

插入

1) insert 任位置插入

myvt.insert(myvt.begin(),-1)

2)myvt.push_back() 尾部插入

1)list1.push_front()

2) list.push_back();

3)list.insertlist.begin(),5)

List.insert(list.ebgin(),5(个数),5)

list.insert(list.begin(),list2.begin(),list2.end());

1) dq.push_front();

2) dq.push_back();

3) dq.insert(dq,begin(),3);

dq.insert(dq.begin(),3(个数),3);

dq.insert(dq.begin(),dq2.begin(),dq2.end());

移除

1) myvt.pop_back()尾部删除

2) myvt.clear() 清除元素

3) myvt.erase(myvt.begin())删除开始元素,也可以删除一定范围的元素

remove算法

1) list.pop_front()

2) list.pop_back();

3)list.erase(it)

4)list.clear() 清除元素

5)list.remove(9)

6)list.remove_if()

bool isodd(int a)

{

return a % 2 == 1;

}

l1.remove_if(isodd);

isodd函数为真则移除

1) dq.pop_front();

2) dq.pop_back();

3) dq.erase(dq.begin());

4) dq.clear()

交换

myvt.swap()函数实现瞬间交换

list3.swap(list1)交换的同时,列表的大小也交换了

dq.swap(dq2)

运算符函数

支持==,>=,<=,!=,>,<等判断比较符号

支持==,>=,<=,!=,>,<等判断比较符号

支持==,>=,<=,!=,>,<等判断比较符号

合并函数

没有

1)合并前,两个序列是有序的,并且顺序相同

list1.merge(list2)

2) splice函数

list1.splice(list1.end(),list2);合并list1和list2

list1.splice(list1.end(),list2,list2.begin())

把list2开始元素插入list1后边

List1.splice(list1.end(),list2,list2.begin(),list2.end())

将list2种元素插入list1中

排除相同元素

没有

list1.sort()

list1.unique() 移除相邻的相同元素,一般是排序以后使用

没有

颠倒

没有

list.reverse() 逆序链表

没有

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: