[c++] <vector>

特性

  • 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()

http://www.cplusplus.com/reference/vector/vector/pop_back/

原文地址:https://www.cnblogs.com/cxc1357/p/12194276.html