vector<typename> name;
相当于定义了一个一维数组name[SIZE],只不过其长度可以根据需要进行变化,比较节省空间,通俗来讲,vector就是“变长数组”。
类似于一维数组,typename可以是任何基本类型,也可以是STL容器。
vector<int> name; vector<double> name; vector<char> name; vector<Node> name; //Node为结构体类型 vector<vector<int> > name;
vector可以通过下标和迭代器来访问。
(1)通过下标访问
这里,可以把vector看成普通数组,访问方式和普通数组一样(如vi[0]、vi[1])。
(2)通过迭代器访问
迭代器可以理解为一种类似于指针的东西,定义为
vector<typename>::iterator it;
通过下面的例子来演示通过迭代器访问数组元素:
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 vector<int> vi; 5 int main() 6 { 7 for(int i=0;i<5;i++){ 8 vi.push_back(i+1); 9 } 10 vector<int>::iterator it=vi.begin(); //迭代器指向vi的首地址 11 for(int i=0;i<5;i++){ 12 cout<<*(it+i)<<" "; //输出vi[i] 13 } 14 return 0; 15 }
输出结果: 1 2 3 4 5
(1)push_back()
push_back(x)功能为在vector后面添加一个元素x,时间复杂度为O(1)。
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 vector<int> vi; 5 int main() 6 { 7 for(int i=0;i<5;i++){ 8 vi.push_back(i); //将i的值依次插入到vi的尾部 9 } 10 for(int i=0;i<vi.size();i++){ 11 cout<<vi[i]<<" "; 12 } 13 return 0; 14 }
输出结果: 0 1 2 3 4
(2)pop_back()
pop_back()用来删除vector的尾元素,时间复杂度为O(1)。
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 vector<int> vi; 5 int main() 6 { 7 for(int i=0;i<5;i++){ 8 vi.push_back(i); //将i的值依次插入到vi的尾部 9 } 10 vi.pop_back(); //删除尾元素 11 for(int i=0;i<vi.size();i++){ 12 cout<<vi[i]<<" "; 13 } 14 return 0; 15 }
输出结果: 0 1 2 3
(3)size()
size()用来获得vector中元素的个数,时间复杂度为O(1)。
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 vector<int> vi; 5 int main() 6 { 7 for(int i=0;i<5;i++){ 8 vi.push_back(i); //将i的值依次插入到vi的尾部 9 } 10 cout<<vi.size(); 11 return 0; 12 }
输出结果: 5
(4)clear()
clear()用来清空vector中的所有元素,时间复杂度为O(n)。
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 vector<int> vi; 5 int main() 6 { 7 for(int i=0;i<5;i++){ 8 vi.push_back(i); //将i的值依次插入到vi的尾部 9 } 10 vi.clear(); //清空所有元素 11 cout<<vi.size(); 12 return 0; 13 }
输出结果: 0
(5)insert()
insert(it, x)用来向vector的任意迭代器it处插入一个元素x,时间复杂度为O(n)。
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 vector<int> vi; 5 int main() 6 { 7 for(int i=0;i<5;i++){ 8 vi.push_back(i); //将i的值依次插入到vi的尾部 9 } 10 vi.insert(vi.begin()+2,10); //将10插入到vi[2]的位置 11 for(int i=0;i<vi.size();i++){ 12 cout<<vi[i]<<" "; 13 } 14 return 0; 15 }
输出结果: 0 1 10 2 3 4
(6)erase()
erase()既可以删除单个元素,还可以删除一个区间的所有元素。时间复杂度为O(n)。
删除单个元素
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 vector<int> vi; 5 int main() 6 { 7 for(int i=0;i<5;i++){ 8 vi.push_back(i); //将i的值依次插入到vi的尾部 9 } 10 vi.erase(vi.begin()+2); //删除vi[3] 11 for(int i=0;i<vi.size();i++){ 12 cout<<vi[i]<<" "; 13 } 14 return 0; 15 }
输出结果: 0 1 3 4
删除一个区间内的所有元素
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 vector<int> vi; 5 int main() 6 { 7 for(int i=0;i<5;i++){ 8 vi.push_back(i); //将i的值依次插入到vi的尾部 9 } 10 vi.erase(vi.begin()+2,vi.begin()+4); //删除vi[2]、vi[3] 11 for(int i=0;i<vi.size();i++){ 12 cout<<vi[i]<<" "; 13 } 14 return 0; 15 }
输出结果: 0 1 4
原文:https://www.cnblogs.com/cocktail/p/14803238.html