Vector里常用的操作(C++)

1 引言

编程时常用的Vector操作有创建、访问元素、增加元素、删除元素、修改元素、查找索引以及一些常用的函数操作,本文总结了一下这些方法在C++里面的实现方式(并不是唯一的)。

2 创建

操作类别注释C++
创建创建空向量vector<int>a;
创建向量常量std::vector<int> a = {1, 2, 3, 4, 5 };
创建长度为3,值为0的向量std::vector<int> a(3);
创建长度为3,值为1的向量std::vector<int> a;
a.assign(3, 1);

3 访问元素

操作类别注释C++
创建创建空向量vector<int>a;
创建向量常量std::vector<int> a = {1, 2, 3, 4, 5 };
创建长度为3,值为0的向量std::vector<int> a(3);
创建长度为3,值为1的向量std::vector<int> a;
a.assign(3, 1);
访问访问第i个元素v[i]
切片,第i到j个元素std::vector<int> vec;
vec.assign(v.begin() + i-1, v.begin() + j)//新生成v的子数组vec

 4 增加元素

操作类别注释C++
增加在起始位置增加一个元素a.insert(a.begin() + 0, 5);
在中间位置增加一个元素a.insert(a.begin() + i-1, 5);
在末尾位置增加一个元素a.push_back(5);
在起始位置增加一段元素a.insert(a.begin() + 0, b.begin(), b.end());
在中间位置增加一段元素a.insert(a.begin() + i-1, b.begin(), b.end());
在末尾位置增加一段元素a.insert(a.end(),b.begin(), b.end());

5 删除元素

操作类别注释C++
删除删除第一个元素a.erase(a.begin() , a.begin() + 1);
删除最后一个元素a.pop_back();
删除第i个元素a.erase(a.begin()+i-1, a.begin() + i);
删除开始位置长度固定的元素a.erase(a.begin() , a.begin()+length);
删除中间段(第i个位置)长度固定的元素a.erase(a.begin() + i - 1, a.begin() + i + length - 1);
删除末尾位置长度固定的元素a.erase(a.end() -length, a.end());
删除全部的元素a.clear();

 6 修改元素

操作类别注释C++
修改修改第一个元素a[0] = 100;
修改第i个元素a[i] = 200;
修改最后一个元素a.back() = 300;
修改第一段元素copy(b.begin(), b.end(), a.begin());
修改中间段元素copy(b.begin(), b.end(), a.begin()+i-1);
修改最后一段元素copy(b.begin(), b.end(), a.end() -b.size());

7 查找元素

操作类别注释C++
查找查找等于某个值的第一个索引for (int i = 0; i < a.size(); i++) {
  if (a[i] == target) {
   index = i;
   break;
  }
 }
查找等于某个值的最后一个索引 for (int i = 0; i < a.size(); i++) {
   if (a[i] == target) {
    index = i;
   }
 }
查找等于某个值的所有索引 for (int i = 0; i < a.size(); i++) {
  if (a[i] == target) {
   all_index.push_back(i);
  }
 }
查找大于某个值的第一个索引 for (int i = 0; i < a.size(); i++) {
  if (a[i] > target) {
   index = i;
   break;
  }
 }
查找大于某个值的最后一个索引 for (int i = 0; i < a.size(); i++) {
  if (a[i] > target) {
   index = i;
  }
 }
查找大于某个值的所有索引 for (int i = 0; i < a.size(); i++) {
  if (a[i] > target) {
   all_index.push_back(i);
  }
 }
查找小于某个值的第一个索引 for (int i = 0; i < a.size(); i++) {
  if (a[i] < target) {
   index = i;
   break;
  }
 }
查找小于某个值的最后一个索引 for (int i = 0; i < a.size(); i++) {
  if (a[i] < target) {
   index = i;
  }
 }
查找小于某个值的所有索引 for (int i = 0; i < a.size(); i++) {
  if (a[i] <= target) {
   all_index.push_back(i);
  }
 }

8 常用函数

操作类别注释C++
向量函数求和std::accumulate(v.begin(), v.end(), 0);//0是初始值
均值static_cast<double> std::accumulate(v.begin(), v.end(), 0)/v.size()
标准差double variance = 0;
for (int i : vec) {
    variance += pow(i - mean, 2);
}
double stdev = sqrt(variance / vec.size());
中值std::sort(vec.begin(), vec.end());
double median;
if (vec.size() % 2 == 0)
{ median = static_cast<double>(vec[vec.size() / 2 - 1] + vec[vec.size() / 2]) / 2; }
 else
{ median = vec[vec.size() / 2]; }
最大值auto max_element = std::max_element(vec.begin(), vec.end());//返回的是迭代器
int max_value = *max_element;//*就得到最大值
最大值索引int max_index = std::distance(vec.begin(), max_element);
最小值auto min_element = std::min_element(vec.begin(), vec.end());//返回的是迭代器
int min_value = *min_element;//*得到最小值
最小值索引int min_index = std::distance(vec.begin(), min_element);
排序std::sort(vec.begin(), vec.end())
等差数列int start = 1;
int diff = 1;
int length = 10;
std::vector<int> vec;
for (int i = 0; i < length; i++) {
    vec.push_back(start + i * diff);
}
反转reverse(v.begin(),v.end());

9 代码示例

 代码对应VS工程文件:

Vector常用操作的工程文件资源-CSDN文库

其它相关链接

数组常用操作对照表——matlab和C++(vector)_c++ matlab vector-CSDN博客

  • 17
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dfreedom.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值