注意事项:
特别注意任何时候同时使用两个迭代器产生的将会是一个前闭后开的区间(具体见插入和删除的例子)
特别注意begin()指向的是vec中的第0个元素,而end是指向最后一个元素的后面一个位置(不是最后一个元素)
特别注意迭代器的时效性,如果一个迭代器所指向的内容已经被删除,而后又使用该迭代器的话,会造成意想不到的后果

  1 //容器的基本操作
2 //特别注意任何时候同时使用两个迭代器产生的将会是一个前闭后开的区间(具体见插入和删除的例子)
3 //特别注意begin()指向的是vec中的第0个元素,而end是指向最后一个元素的后面一个位置(不是最后一个元素)
4 //特别注意迭代器的时效性,如果一个迭代器所指向的内容已经被删除,而后又使用该迭代器的话,会造成意想不到的后果
5 #include<iostream>
6 #include<vector>
7 #include<algorithm>
8 using namespace std;
9 void print(vector<int> vec)
10 {
11 for(int i=0;i<vec.size();i++)
12 {
13 cout<<vec[i]<<" ";
14 }
15 cout<<endl;
16 }
17
18 int main()
19 {
20 //初始化,一般序列式容器初始化容量、内容,关联式容器初始化比较方法
21 int num[10]={0,1,2,3,4,5,6,7,8,9};
22 vector <int> vec(num,num+10);
23 print(vec);
24
25 //增加元素insert(要使用迭代器,在迭代器的指定位置插入数据,注意与string区分)、push
26 //特别注意如果使用两个迭代器产生的将会是一个前闭后开的区间
27 vector<int>::iterator iter_int;
28 //在第二个元素(vec[1])的位置上插入99
29 iter_int=vec.begin()+1;
30 vec.insert(iter_int,99);
31 cout<<"在第二个元素(vec[1])的位置上插入99"<<endl;
32 print(vec);
33 //在第三个元素(vec[2])的位置上插入3个100
34 iter_int=vec.begin()+2;
35 vec.insert(iter_int,3,100);
36 cout<<"在第三个元素(vec[1])的位置上插入三个100"<<endl;
37 print(vec);
38 vector<int>temp(num,num+10);
39 cout<<"temp:"<<endl;
40 print(temp);
41 vector<int>::iterator t1=temp.begin()+1;
42 vector<int>::iterator t2=temp.begin()+3;
43 vec.insert(vec.begin(),t1,t2);
44 cout<<"在第1个元素(vec[0])的位置上插入temp的[1,3)后的vec:";
45 print(vec);
46
47 cout<<"push插入操作"<<endl;
48 vec.push_back(100);
49 print(vec);
50
51 //删除元素erase、clear(全删除)
52 //特别注意如果使用两个迭代器产生的将会是一个前闭后开的区间
53 iter_int=vec.begin();
54 vec.erase(iter_int,iter_int+5);
55 cout<<"删除操作,删除[0,5)区间的内容"<<endl;
56 print(vec);
57
58 //查找操作(序列式容器没有查找操作,只有关联式容器采用)
59
60 //修改元素,修改元素先查找要修改的元素,如果查找返回引用则直接对引用进行修改,如果返回的是迭代器,需要使用迭代器的方法修改元素的值
61 cout<<"修改元素操作"<<endl;
62 vec[0]=8;//[]返回的是引用,所以直接操作
63 print(vec);
64 iter_int=vec.begin();
65 *iter_int=9;//迭代器需要使用迭代器的方法修改元素的值
66 print(vec);
67
68 //和指定容器交换元素swap
69 cout<<"交换内容"<<endl;
70 vector <int> vec1(num,num+10);
71 cout<<"交换前的元素vec:";
72 print(vec);
73 cout<<"交换前的元素vec1:";
74 print(vec1);
75 vec1.swap(vec);
76 cout<<"交换后的元素vec:";
77 print(vec);
78 cout<<"交换后的元素vec1:";
79 print(vec1);
80
81 //容器之间可以比较,与string的比较一样
82 if(vec>vec1)
83 {
84 cout<<"vec>vec1"<<endl;
85 }
86 else
87 {
88 cout<<"vec<=vec1"<<endl;
89 }
90
91 //排序
92 cout<<"对vec1排序"<<endl;
93 iter_int=vec1.begin();
94 sort(iter_int,iter_int+vec1.size());
95 print(vec1);
96
97 //begin() end()
98 //要特别注意begin()指向的是vec中的第0个元素,而end是指向最后一个元素的后面一个位置(不是最后一个元素)
99 cout<<"begin and end"<<endl;
100 iter_int=vec1.begin();
101 cout<<*iter_int<<endl;
102 iter_int=vec1.end()-1;//如果写成这样就错了iter_int=vec1.end();
103 cout<<*iter_int<<endl;
104 return 0;
105 }

C++ STL之vector容器的基本操作-LMLPHP

04-25 04:52