当前位置: 首页 > news >正文

std vector 用法

        使用vector,需添加头文件#include,要使用sort或find,则需要添加头文件#include。函数封装在命名空间std中,使用:using namespace std;

1、vector的初始化

std::vector<int> nVec;     // 空对象
std::vector<int> nVec(5,-1);  // 创建了一个包含5个元素且值为-1的vector
std::vector<std::string> strVec{"a", "b", "c"};  // 列表初始化   
std::vector<int> nVec;  nVec.push_back(i);    // 压入元素

  要注意“()”和“{}”这样的初始化情况,如:

std::vector<int> nVec(10,1);    // 包含10个元素,且值为1
std::vector<int> nVec{10,1};    // 包含2个元素,值分别为10,1

2、vector访问

方法1,数组下标访问

for(size_t i = 0; i < nVec.size(); ++i)std::cout << nVec[i] << std::endl; // 输出元素

方法2,迭代器访问

std::vector<int>::iterator itr = nVec.begin();
for(; itr != nVec.end(); ++itr)std::cout << (*itr)  << std::endl; 

方法3,使用auto

for(auto &it: nVec)std::cout << it  << std::endl; 

3、vector删除元素

  针对于非array容器有多种删除方式,以erase为例,比如:

c.erase(p); // 删除迭代器p所指定的元素,返回一个指向被删除元素之后的迭代器。
c.erase(begin,end); // 删除b,e所指定范围内的元素,返回一个指向被删除元素之后的迭代器。
c.clear(); // 删除所有元素

  注意,删除元素,会导致迭代器无效。正确的删除元素示例:

std::vector<int>::iterator iter = nVec.begin();
for(auto it = nVec.begin(); iter != nVec.end();)
{if(*it == delVal){it = nVec.erase(iter);continue;}it++;
}

  删除容器内某一个特定的元素,编写方式可为:

std::vector<int>::iterator iter = std::find(nVec.begin(),nVec.end(),5);
if(iter != nVec.end())nVec.erase(iter);

  删除容器内所有元素,当然可以这样:

nVec.erase(nVec.begin(),nVec.end());
nVec.clear();

4、vector的容量与大小

  vector并非随着每个元素的插入而增长自己,它总是分配一些额外的内存容量,这种策略使得vector的效率更高些。若要获取当前vector的大小,可调用size()函数,而获取当前vector的容量,可调用capcity()。

5、vector排序

        sort函数包含在头文件为#include的c++标准库中, #include。

sort函数的三个参数:

        a)待排序的数组的起始地址;

        b)待排序数组的结束地址;

        c)排序的方法,可以从大到小,也可以从小到大,还可以不写,默认为从小到大。

5.1、默认排序

int cNum[10] = {0,4,6,8,9,2,3,5,6,7}; 
sort(cNum, cNum+10);vector<int> vecNum{0,4,6,8,9,2,3,5,6,7}; 
sort(vecNum.beigin()), vecNum.end());

5.2、自定义排序

bool complare(int a,int b)
{return a>b; // 从大到小排序
}vector<int> vecNum{0,4,6,8,9,2,3,5,6,7}; 
sort(vecNum.beigin()), vecNum.end(), complare);sort(vecNum.begin(), vecNum.end(),[](int a ,int b){return a>b;
}); //使用lambda表达式

5.3、结构体排序

struct node
{int a;int b;double c;
}bool cmp(node x,node y)
{if(x.a!=y.a) return x.a<y.a;if(x.b!=y.b) return x.b>y.b;return x.c>y.c;
}

6、vector的交集、并集、补集

#include "iostream"
#include "vector" 
#include "algorithm" //sort函数、交并补函数
#include "iterator" //求交并补使用到的迭代器
using namespace std;// 容器vector中元素的去重
vector<int> unique_element_in_vector(vector<int> v)
{vector<int>::iterator vector_iterator;sort(v.begin(),v.end());vector_iterator = unique(v.begin(),v.end());if(vector_iterator != v.end()){v.erase(vector_iterator,v.end());}return v;
}// 两个vector求交集
vector<int> vectors_intersection(vector<int> v1, vector<int> v2)
{vector<int> v;sort(v1.begin(),v1.end());   sort(v2.begin(),v2.end());   set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 return v;
}// 两个vector求并集
vector<int> vectors_set_union(vector<int> v1, vector<int> v2)
{vector<int> v;sort(v1.begin(),v1.end());   sort(v2.begin(),v2.end());   set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 return v;
}//判断vector的某一元素是否存在
bool is_element_in_vector(vector<int> v,int element)
{vector<int>::iterator it;it=find(v.begin(),v.end(),element);if (it!=v.end()){return true;}else{return false;}
}//两个vector求补集
std::vector<int> d1;
std::vector<int> d2;
std::cout << "set_different" << std::endl;
//Copies the elements from the sorted range [first1, last1) 
//which are not found in the sorted range [first2, last2) to the range beginning //at d_first
std::set_difference(v1.begin(),v1.end(),result.begin(),result.end(),std::back_inserter(d1));
std::set_difference(v2.begin(),v2.end(),result.begin(),result.end(),std::back_inserter(d2));
http://www.lryc.cn/news/104604.html

相关文章:

  • vue vite ts electron ipc addon-napi c arm64
  • 机器人科普--AGILOX 叉车
  • Django的生命周期流程图(补充)、路由层urls.py文件、无名分组和有名分组、反向解析(无名反向解析、有名反向解析)、路由分发、伪静态
  • selenium交互代码
  • 下载远程服务器文件
  • [SQL挖掘机] - 索引
  • C++STL库中的list
  • 【LeetCode 75】第十七题(1493)删掉一个元素以后全为1的最长子数组
  • 配置IPv6 over IPv4 GRE隧道示例
  • Google Earth Engine谷歌地球引擎提取多波段长期反射率数据后绘制折线图并导出为Excel
  • 第三大的数
  • 正则表达式中的方括号[]有什么用?
  • SQL编写规范
  • Azure pipeline自动化打包发布
  • 【算法提高:动态规划】1.4 状态机模型 TODO
  • ip link add 命令
  • unity事件处理
  • 《ChatGPT原理最佳解释,从根上理解ChatGPT》
  • 大数据Flink(五十):流式计算简介
  • 13-4_Qt 5.9 C++开发指南_基于QWaitCondition 的线程同步_Wait
  • STM32(HAL)多串口进行重定向(printf函数发送数据)
  • 29_互联网(The Internet)(IP数据包;UDP;TCP;DNS;OSI)
  • xShell常用命令
  • React性能优化之Memo、useMemo
  • IDEA开启并配置services窗口
  • vue2企业级项目(三)
  • QT 在label上透明绘图
  • SAM(Segment Anything)大模型论文汇总
  • 金融翻译难吗,如何做好金融翻译?
  • Java面试题(Tomcat与Nginx)