当前位置:   article > 正文

C++中的vector的详细用法_vector c++ 用法

vector c++ 用法

目录

C++中的vector的详细用法

一、vector的介绍

二、存储类型

三、函数

四、vector二维数组两种方法

五、vector中find()用法

六、vector的访问

七、vector中insert()函数增加元素操作

八、vector中erase()函数删除元素操作


一、vector的介绍

头文件:#include < vector >

向量(Vector)是一个封装了动态大小数组的顺序容器。

跟任意其它类型容器一样,它能够存放各种类型的对象。

可以简单的认为,向量是一个能够存放任意类型的动态数组

二、存储类型

  1. vector<类型>标识符
  2. vector<类型>标识符(最大容量)
  3. vector<类型>标识符(最大容量,初始所有值)
  4. int i[5]={1,2,3,4,5}
  5. vector<类型>vi(i,i+2);//得到i索引值为3以后的值
  6. vector<vector<int>>v; 二维向量//这里最外的<>要有空格。否则在比较旧的编译器下无法通过

 

三、函数

  1. push_back() //在数组的最后添加一个数据
  2. pop_back() //去掉数组的最后一个数据
  3. at() //得到编号位置的数据
  4. begin() //得到数组头的指针
  5. end() //得到数组的最后一个单元+1的指针
  6. find() //判断元素是否存在
  7. front() //得到数组头的引用
  8. back() //得到数组的最后一个单元的引用
  9. max_size() //得到vector最大可以是多大
  10. capacity() //当前vector分配的大小
  11. size() //当前使用数据的大小
  12. capacity(); //返回a在内存中总共可以容纳的元素个数
  13. a.reserve(100); //改变当前vecotr所分配空间的大小将a的容量(capacity)扩充至100,也就是说现在测试a.capacity();的时候返回值是100
  14. a.resize(10); //将a的现有元素个数调至10个,多则删,少则补,增加的元素其值默认为0
  15. a.resize(10,2); //将a的现有元素个数调至10个,多则删,少则补,增加的元素其值为2
  16. erase() //删除指针指向的数据项
  17. clear() //清空当前的vector
  18. rbegin() //将vector反转后的开始指针返回(其实就是原来的end-1)
  19. rend() //将vector反转构的结束指针返回(其实就是原来的begin-1)
  20. empty() //判断vector是否为空
  21. swap() //与另一个vector交换数据
  22. a.swap(b); //b为向量,将a中的元素和b中的元素进行整体性交换
  23. reverse(obj.begin(),obj.end());反向迭代器,实现元素对调

 

四、vector二维数组两种方法

第一种:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int main()
  4. {
  5. int N=5, M=6;
  6. vector<vector<int>> obj(N); //定义二维动态数组大小5行
  7. for(int i =0; i< obj.size(); i++)//动态二维数组为5行6列,值全为0
  8. {
  9. obj[i].resize(M);
  10. }
  11. for(int i=0; i< obj.size(); i++)//输出二维动态数组
  12. {
  13. for(int j=0;j<obj[i].size();j++)
  14. {
  15. cout<<obj[i][j]<<" ";
  16. }
  17. cout<<"\n";
  18. }
  19. return 0;
  20. }

 第二种:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int main()
  4. {
  5. int N=5, M=6;
  6. vector<vector<int> > obj(N, vector<int>(M)); //定义二维动态数组5行6列
  7. for(int i=0; i< obj.size(); i++)//输出二维动态数组
  8. {
  9. for(int j=0;j<obj[i].size();j++)
  10. {
  11. cout<<obj[i][j]<<" ";
  12. }
  13. cout<<"\n";
  14. }
  15. return 0;
  16. }

 

五、vector中find()用法

  1. find(数组的头地址, 数组的尾地址, 要找的数)
  2. find(nums.begin(), nums.end(), target)
  3. //返回的是target第一次出现的地址
  4. //如果没有找到返回尾地址nums.end()
代码: 
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std;
  5. using std::vector;
  6. using std::cout;
  7. using std::endl;
  8. int main() {
  9. vector<int> nums = {2,7,8,8,9};
  10. int target = 8;
  11. vector<int>::iterator loc = find(nums.begin(), nums.end(), target);
  12. if (loc == nums.end()) {
  13. cout << "数组中没有" << target << endl;
  14. }
  15. else {
  16. cout << "数组中有" << target << endl;
  17. cout << "并且, 它的第一次出现的位置为:" << loc - nums.begin() << endl;
  18. }
  19. }

 

 

六、vector的访问

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int main()
  4. {
  5. //顺序访问
  6. vector<int>obj;
  7. for(int i=0;i<10;i++)
  8. {
  9. obj.push_back(i);//存储数据
  10. }
  11. //方法一数组访问
  12. cout<<"直接利用数组:";
  13. for(int i=0;i<10;i++)
  14. {
  15. cout<<obj[i]<<" ";
  16. }
  17. cout<<endl;
  18. //方法二,使用迭代器将容器中数据输出
  19. cout<<"利用迭代器:" ;
  20. vector<int>::iterator it;
  21. //声明一个迭代器,来访问vector容器,作用:遍历或者指向vector容器的元素
  22. for(it=obj.begin();it!=obj.end();it++)
  23. {
  24. cout<<*it<<" ";
  25. }
  26. return 0;
  27. }

 

七、vector中insert()函数增加元素操作

使用push_back()方式

  1. push_back() //往vector末尾插入一个元素
  2. //使用push_back()方式
  3. vector<int> vA;
  4. vA.push_back(1); //vA中push一个1 (vA={1})

使用insert()方式插入元素 

  1. insert() //往vector任意位置插入一个元素,指定位置或者指定区间进行插入,
  2. //第一个参数是个迭代器,第二个参数是元素。返回值是指向新元素的迭代器
  3. vector<int> vA;
  4. vector<int>::iterator it;
  5. //指定位置插入
  6. //iterator insert(const_iterator _Where, const _Ty& _Val)
  7. //第一个参数是个迭代器位置,第二个参数是元素
  8. it = vA.insert(vA.begin(),2); //往begin()之前插入一个int元素2 (vA={2,1}) 此时*it=2
  9. //指定位置插入
  10. //void insert(const_iterator _Where, size_type _Count, const _Ty& _Val)
  11. //第一个参数是个迭代器位置,第二个参数是要插入的元素个数,第三个参数是元素值
  12. it = vA.insert(vA.end(),2,3);//往end()之前插入2个int元素3 (vA={2,1,3,3}) 此时*it=3
  13. //指定区间插入
  14. //void insert(const_iterator _Where, _Iter _First, _Iter _Last)
  15. vector<int> vB(3,6); //vector<类型>标识符(最大容量,初始所有值)
  16. it = vA.insert(vA.end(),vB.begin(),vB.end()); //把vB中所有元素插入到vA的end()之前 (vA={2,1,3,3,6,6,6})
  17. //此时*it=6,指向最后一个元素值为6的元素位置
  18. //删除元素操作:
  19. pop_back() 从vector末尾删除一个元素
  20. erase() 从vector任意位置删除一个元素,指定位置或者指定区间进行删除,第一个参数都是个迭代器。返回值是指向删除后的下一个元素的迭代器
  21. clear() 清除vector中所有元素, size=0, 不会改变原有capacity值

 

 

八、vector中erase()函数删除元素操作

  1. pop_back() //从vector末尾删除一个元素
  2. erase() //从vector任意位置删除一个元素
  3. //指定位置或者指定区间进行删除,第一个参数都是个迭代器。 方法与insert()相同
  4. //返回值是指向删除后的下一个元素的迭代器
  5. clear() //清除vector中所有元素, size=0, 不会改变原有capacity值

代码示例:

  1. #include <string.h>
  2. #include <vector>
  3. #include <iostream>
  4. using namespace std;
  5. int main()
  6. {
  7. vector<int>obj;//创建一个向量存储容器 int
  8. for(int i=0;i<10;i++) // push_back(elem)在数组最后添加数据
  9. {
  10. obj.push_back(i);
  11. cout<<obj[i]<<",";
  12. }
  13. for(int i=0;i<5;i++)//去掉数组最后一个数据
  14. obj.pop_back();
  15. cout<<"\n"<<endl;
  16. for(int i=0;i<obj.size();i++)//size()容器中实际数据个数
  17. cout<<obj[i]<<",";
  18. /*
  19. 分为升序和降序两排序方式:
  20. vector<int>v;
  21. sort(v.begin(), v.end(),less<int>());//升序
  22. sort(v.begin(), v.end(),greater<int>());//降序
  23. */
  24. //sort(obj.begin(),obj.end());//从小到大
  25. //reverse(obj.begin(),obj.end());反向迭代器,实现元素对调
  26. //obj.clear();//清除容器中所以数据
  27. return 0;
  28. }

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/174622
推荐阅读
  

闽ICP备14008679号