66)vector基础总结

基本知识:

    

 

1)vector 样子  其实就是一个动态数组:


    

 

2)vector的基本操作:    

    

 

 

 3)vector对象的默认构造

 

    

    对于类  添加到  容器中  要有  拷贝构造函数---》 这个注意

 

------(1) 利用  v1.size()  来求容器中元素的个数

  

      

 

 1 #include<iostream>
 2 #include<vector>
 3 using namespace std;
 4  void hanshu()
 5  {
 6      vector<int> v1;
 7      v1.push_back(2);
 8      v1.push_back(3);
 9      v1.push_back(4);
10   //这个 size()  就是在求容器的长度
11      cout<<v1.size()<<endl;
12 //
13  }
14  int main()
15  {
16     hanshu();
17      return 0;
18  }

  

 ---------(2)求这个动态数组的最后一个元素和 第一个元素

    

        

 1 #include<iostream>
 2 #include<vector>
 3 using namespace std;
 4  void hanshu()
 5  {
 6      vector<int> v1;
 7      v1.push_back(2);
 8      v1.push_back(3);
 9      v1.push_back(4);
10 
11      //求解第一个元素值
12      cout<<v1.front()<<endl;
13      //求解最后一个元素的值
14      cout<<v1.back()<<endl;
15 
16  }
17  int main()
18  {
19     hanshu();
20      return 0;
21  }

 

   ---------(3)修改容器的头部信息

 

 1 #include<iostream>
 2 #include<vector>
 3 using namespace std;
 4  void hanshu()
 5  {
 6      vector<int> v1;
 7      v1.push_back(2);
 8      v1.push_back(3);
 9      v1.push_back(4);
10      //函数返回值作为左值成立,那么是返回一个引用
11     //修改第一个元素值
12      v1.front()=11;
13 
14  }
15  int main()
16  {
17     hanshu();
18      return 0;
19  }

 

----------------------(4)vector赋值

 

      

 

  

---------------(5)vector末尾添加或移除数据

 

      

 

  --------------(6)存取vector数据

 

          

 

    ---(7)vector中的拷贝构造函数,如果没有自己定义  那么就是  浅拷贝,浅拷贝,浅拷贝,浅拷贝,浅拷贝----

      

    主要是由于push_back函数引起的。这个函数会对传递进来的参数进行一次拷贝(调用拷贝构造函数),并将其添加到vector中。如果对象没有拷贝构造函数,编译器会为其生成一个,但是这个编译器生成的拷贝构造函数只是进行了一次浅拷贝,在本例中就是只是复制了str的值,也就是"strend micro"的地址,即拷贝后的对象和原对象的str都是指向同一块内存区域,但是这个拷贝的对象和原对象的析构函数又都会执行,这里就会delete两次。(注意,即使对于一个空类,编译器也会默认生成4个成员函数:默认构造函数,析构函数,拷贝构造函数,赋值函数。)

 

-------------------(8)迭代器的基本原理

      

 

----------(9)vector的数据删除

 

    

 1 理论知识
 2     vector.clear();    //移除容器的所有数据
 3     vec.erase(beg,end);  //删除[beg,end)区间的数据,返回下一个数据的位置。
 4     vec.erase(pos);    //删除pos位置的数据,返回下一个数据的位置。
 5 简单案例:
 6 删除区间内的元素
 7 vecInt是用vector<int>声明的容器,现已包含按顺序的1,3,5,6,9元素。
 8 vector<int>::iterator itBegin=vecInt.begin()+1;
 9 vector<int>::iterator itEnd=vecInt.begin()+2;
10 vecInt.erase(itBegin,itEnd);
11 //此时容器vecInt包含按顺序的1,6,9三个元素。
12 
13 假设 vecInt 包含1,3,2,3,3,3,4,3,5,3,删除容器中等于3的元素
14 for(vector<int>::iterator it=vecInt.being(); it!=vecInt.end(); )    //小括号里不需写  ++it
15 {
16    if(*it == 3)
17    {
18         it  =  vecInt.erase(it);       //以迭代器为参数,删除元素3,并把数据删除后的下一个元素位置返回给迭代器。
19          //此时,不执行  ++it;  
20    }
21    else
22    {
23        ++it;
24    }
25 }
26 
27 //删除vecInt的所有元素
28 vecInt.clear();            //容器为空

 

posted @ 2018-01-14 16:10  小油菜1  阅读(183)  评论(0编辑  收藏  举报