特性
- vector:可变长度动态数组,是一种顺序容器,支持随机访问迭代器,以及所有STL算法
- 可在常数时间访问元素,在中间插入元素,删除元素较慢
- 不断添加元素超过默认大小时,会重新分配内存,复制原有的元素并添加新元素
函数
- vector():无参构造函数,将容器初始化为空
- vector( int n ):初始化为有n个元素
- vector( int n, const T & val ):初始化为有n个T类型元素,每个元素初始值都为val
- vector(iterator first, iterator last ):初始化为与其他容器区间 [ first, last ) 的内容一致
- void clear():删除所有元素
- bool empty():判断容器是否为空
- void push_back( const T & val ):在末尾添加元素
- int size():返回元素个数
- T & front():返回第一个元素的引用
- T & back():返回最后一个元素的引用
- iterator insert( iterator i, const T & val ):将val插入迭代器 i 指向的位置,返回 i
- iterator insert( iterator i, iterator first, iterator last ):将其他容器区间[ first, last ) 中的元素插入迭代器 i 指向的位置
- iterator erase(iterator i):删除迭代器 i 指向的元素,返回被删元素后面元素的迭代器
- void swap( vector <T> & v ):将容器自身内容和另一个同类型容器v互换
- pop_back():删除最后一个元素
示例
初始化、元素处理
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 5 int main(){ 6 vector<int> v{1,2,3,4,5}; 7 for(auto &i:v) 8 i*=i; 9 for(auto i:v) 10 cout<<i<<" "; 11 cout<<endl; 12 }
统计区间内元素数量
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 5 int main(){ 6 vector<unsigned> scores(11,0); 7 unsigned grade; 8 while(cin >> grade){ 9 if(grade <= 100) 10 ++scores[grade/10]; 11 } 12 for(auto i:scores) 13 cout<<i<<" "; 14 cout<<endl; 15 }
不得通过下标访问不存在的元素(错误写法)
1 int main(){ 2 vector<int> v; 3 cout << v[0]; 4 }
将首字母改为大写(通过迭代器访问元素)
1 #include <iostream> 2 #include <vector> 3 #include <string> 4 using namespace std; 5 6 int main(){ 7 string s("some thing"); 8 if(s.begin() != s.end()){ 9 auto it = s.begin(); 10 *it = toupper(*it); 11 } 12 cout<<s<<endl; 13 }
将第一个单词改为大写
1 #include <iostream> 2 #include <vector> 3 #include <string> 4 using namespace std; 5 6 int main(){ 7 string s = "some thing"; 8 for(auto it = s.begin(); it != s.end() && !isspace(*it); ++it) 9 *it = toupper(*it); 10 cout << s << endl; 11 }
创建Vector对象,并把0~99的值赋给它
1 #include<iostream> 2 #include<vector> 3 using std::vector; 4 int main() { 5 vector<int> v2; 6 for (int i = 0; i != 100; ++i) 7 v2.push_back(i); 8 printf("%d ", v2[9]); 9 return 0; 10 }
将数组复制到vector
1 #include<vector> 2 #include<iostream> 3 using namespace std; 4 5 int main(){ 6 vector<int> w; 7 int a[3] = {1,2,3}; 8 w = vector<int>(a,a+3); 9 // 也可以这样写: 10 // vector<int> w(a,a+3); 11 for(auto i:w) 12 cout<<i<<" "; 13 cout<<endl; 14 }
二维vector数组
1 #include <vector> 2 #include <iostream> 3 using namespace std; 4 5 int main(){ 6 vector<vector<int>> vec; 7 vector<int> m_vec; 8 m_vec.push_back(100); 9 m_vec.push_back(200); 10 vec.push_back(m_vec); 11 cout<<vec[0][1]<<endl; 12 13 pair<int,int> p; 14 p = make_pair(300,400); 15 cout << p.first << " " << p.second << endl; 16 17 vector<pair<int,int>> p_vec; 18 p_vec.push_back(make_pair(500,600)); 19 cout << p_vec[0].first << " " << p_vec[0].second << endl; 20 }
参考
vector中存对象还是存指针
https://blog.csdn.net/qq_21441793/article/details/80321467
https://blog.csdn.net/zhongkeli/article/details/6980477
C++:将数组赋值给vector简单方法
https://blog.csdn.net/qq_22532597/article/details/80904664?
pop_back()