2.容器构造函数
3.不同类型容器件的转化
*通过在构造函数中传递迭代器间接实现该功能
eg:
int arr[]={1,2,3,4,5};
vector<int> vec(arr,arr+5);
list<int> lst(vec.begin(),vec.end()); //如果直接传递容器,如list<int> lst1(vec);则出错
3.顺序容器可以接受函数的返回值来指定容器的大小
int f()
{
return 4;
};
int arr[f()]; //error
vector<int> vec(f(),1); //ok 1111
*如果自定义的类型无默认构造函数,则在指定容器大小时需指定每个元素的初始化式
eg:
class A
{
public:
A(int i):x(i){}
private:
int x;
};
vector<A> vec(10); //error
vector<A> vec1(10,1); //ok,都初始化为1
4.接受容器大小做形参的构造函数只适用于顺序容器,而关联容器不支持这种初始化。
5.顺序容器类型必须满足的两个约束
*元素类型必须支持赋值运算
*元素类型的对象必须可以复制
解析:
*IO标准库类型必要支持赋值或复制,所以,不能创建存放IO类型对象的容器
*引用不支持一般意义的赋值运算,因此不能创建存放引用类型的容器
eg:
vector<int&> vec; //error
6.容器的容器
eg:
vector<vector<int>> vec;
7.所有标准库常用迭代器运算
8.vector和deque容器的迭代器提供的额外运算
eg:
int arr[]={1,2,3,4,5};
vector<int> ivec(arr,arr+5);
list<int> lvec(arr,arr+5);
vector<int>::iterator iit=ivec.begin()+ivec.size()/2; //ok
list<int>::iterator lit=lvec.begin()+lvec.size()/2; //error