C++语法基础--顺序容器(一)--vector,list,deque

来源:互联网 发布:数据库服务器默认地址 编辑:程序博客网 时间:2024/05/16 11:32
1.标准库定义的三种容器类型:vector,list,deque(double-ended queue)
           


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
原创粉丝点击