标准容器包括: vector deque list set map multiset multimap
这篇里面讲的函数 它们都可以用
1 构造函数:
拥有 无参构造 拷贝构造 区间构造(两个迭代器表示的两个位置,半开半闭)析构
2 拥有内部类型 - 迭代器,表示位置(封装了一个指针,使用的方法和指针差不多)
(1) 正向迭代器 iterator,const_iterator.begin() 返回指向第一个元素的迭代器
.end() 返回指向超越最后一个位置的迭代器
2 反向迭代器 reverse_iterator ,const_reverse_iterator,可以按相反顺序返回元素
.rbegin() 返回 指向倒数第一个元素的迭代器
.rend() 返回 指向倒数最后一个元素之后位置的迭代器
标准容器的迭代器都支持 * , -> ,= ,++, !=, == ,--
3 函数
插入 .insert(pos,.element) pos表示插入位置,是个迭代器
删除 .erase(pos) .erase(pos_beg,pos_end)
清除 .clear()
大小 .size() .max_size() .empty()
交换 .swap(c2) 非成员函数swap(c1,c2) (成员函数会更好)
运算符: = > < >= <= == !=
4 容器分类:
(1)标准容器 (本篇讲它们的共性 )
{
序列式 : vector deque list
关联式: set map multiset multimap
}
(2)特殊容器:
{
序列式 : vector deque list
关联式: set map multiset multimap
}
(2)特殊容器:
{
stack 栈
queue 队列
priority_queue 优先队列
queue 队列
priority_queue 优先队列
}
5 例子(以vector为例)
#include <iostream>
using namespace std;
#include <vector> //容器名和头文件名是一样的
#include <algorithm>
//输出指定区间中的所有数据 含头不含尾
template<typename T>
void show(T beg,T end)
{
while(beg != end)
{
cout << *beg++ << ' ';
}
cout << endl;
}
int main()
{
int a[5] = {55,22,44,33,11};
vector<int> vi (a,a+5 ); //区间构造函数, 只是在复制了一份值到容器中,不会改变a
cout << vi.size() << endl;//5
sort(vi.begin() ,vi.end()); //使用通用算法排序(<algorithm>)
vector<int>::iterator b = vi.begin(); //内部类型迭代器
cout << "show vi: " << endl;
show(vi.begin() ,vi.end() );
cout << "show a: " << endl;
show(a,a+5);
cout << "show reverse vi: " << endl;
show(vi.rbegin() , vi.rend()); // ++是从尾到头移动
vi.insert(vi.begin(), 66); //插在最前面
show(vi.begin() ,vi.end() ); //66 11 22 33 44 55
b= vi.begin();
vi.insert(++++b,77); //插在第三个前面
show(vi.begin() ,vi.end() );//66 11 77 22 33 44 55
cout << "size:" << vi.size() << ' ' << "maxsize:" << vi.max_size() << endl; //size:7 maxsize:1073741823
vi.erase(--vi.end()); // 删除最后一个数据,因为.end()不是其中元素
show(vi.begin() ,vi.end() ); //66 11 77 22 33 44
vi.erase(++++vi.begin(), --vi.end()); //删除从第三个到最后一个前面的(含第三个,不含最后一个)
show(vi.begin() ,vi.end() );//66 11 44
vector<int> v2(a,a+5);
cout << "v2:" ;
show( v2.begin(),v2.end() );
cout << "swap--------------------------" << endl; //效率最高
vi.swap(v2);
cout << "vi : " ;
show( vi.begin(),vi.end() );
cout << "v2 : ";
show( v2.begin(),v2.end() );
cout << "swap--------------------------" << endl;//使用特化 效率略低
swap(vi,v2);
cout << "vi : " ;
show( vi.begin(),vi.end() );
cout << "v2 : ";
show( v2.begin(),v2.end() );
cout << "swap--------------------------" << endl; //效率最低
vector<int> t =vi;
vi = v2;
v2 = t;
cout << "vi : " ;
show( vi.begin(),vi.end() );
cout << "v2 : ";
show( v2.begin(),v2.end() );
vi.clear();
cout << "after clear, size:" << vi.size() << endl;
show( vi.begin(),vi.end() ); //空
/*vector 仅有的 .capacity()*/ //这个下篇会写的
cout << "当前v2容量:" << v2.capacity() << endl; //5 最开始分配了5个元素的
cout << "当前元素个数" << v2.size() << endl; //3 删了2个只剩3个
cout << "当前vi已分配空间:" << vi.capacity() << endl;
}