数组常用操作对照表——matlab和C++(vector)

操作类别注释MatlabC++备注
创建创建空向量a=[];vector<int>a; 
创建向量常量a = [1, 2, 3, 4, 5];std::vector<int> a = {1, 2, 3, 4, 5 }; 
创建长度为3,值为0的向量a = zeros(1, 3)std::vector<int> a(3); 
创建长度为3,值为1的向量a = ones(1, 3);std::vector<int> a;
a.assign(3, 1);
 
访问访问第i个元素v(i)v[i] 
切片,第i到j个元素v(i:j)std::vector<int> vec;
vec.assign(v.begin() + i-1, v.begin() + j)//新生成v的子数组vec
 
增加在起始位置增加一个元素a=[5,a];a.insert(a.begin() + 0, 5); 
在中间位置增加一个元素a=[a(1:i-1),5,a(i:end)];a.insert(a.begin() + i-1, 5); 
在末尾位置增加一个元素a=[a,5];a.push_back(5); 
在起始位置增加一段元素a=[b,a];a.insert(a.begin() + 0, b.begin(), b.end());b是增加的那段元素
在中间位置增加一段元素a=[a(1:i-1),b,a(i:end)];a.insert(a.begin() + i-1, b.begin(), b.end());b是增加的那段元素
在末尾位置增加一段元素a=[a,b];a.insert(a.end(),b.begin(), b.end());b是增加的那段元素
删除删除第一个元素a(1)=[];a.erase(a.begin() , a.begin() + 1); 
删除最后一个元素a(i)=[];a.pop_back(); 
删除第i个元素a(end)=[];a.erase(a.begin()+i-1, a.begin() + i); 
删除开始位置长度固定的元素a(1:len)=[];a.erase(a.begin() , a.begin()+length); 
删除中间段(第i个位置)长度固定的元素a(i:len)=[];a.erase(a.begin() + i - 1, a.begin() + i + length - 1); 
删除末尾位置长度固定的元素a(end-len+1:end)=[];a.erase(a.end() -length, a.end()); 
删除全部的元素a=[];a.clear(); 
修改修改第一个元素a(1)=100;a[0] = 100; 
修改第i个元素a(i)=200;a[i] = 200; 
修改最后一个元素a(end)=300;a.back() = 300; 
修改第一段元素a(1:length(b))=b;copy(b.begin(), b.end(), a.begin());a为被修改的向量
修改中间段元素a(i:length(b))=b;copy(b.begin(), b.end(), a.begin()+i-1);a为被修改的向量
修改最后一段元素a(end-length(b)+1:end)=b;copy(b.begin(), b.end(), a.end() -b.size());a为被修改的向量
查找查找等于某个值的第一个索引min(find(a==target))for (int i = 0; i < a.size(); i++) {
  if (a[i] == target) {
   index = i;
   break;
  }
 }
 
查找等于某个值的最后一个索引max(find(a==target)) for (int i = 0; i < a.size(); i++) {
   if (a[i] == target) {
    index = i;
   }
 }
 
查找等于某个值的所有索引find(a==target) for (int i = 0; i < a.size(); i++) {
  if (a[i] == target) {
   all_index.push_back(i);
  }
 }
 
查找大于某个值的第一个索引min(find(a>target)) for (int i = 0; i < a.size(); i++) {
  if (a[i] > target) {
   index = i;
   break;
  }
 }
 
查找大于某个值的最后一个索引max(find(a>target)) for (int i = 0; i < a.size(); i++) {
  if (a[i] > target) {
   index = i;
  }
 }
 
查找大于某个值的所有索引find(a>target) for (int i = 0; i < a.size(); i++) {
  if (a[i] > target) {
   all_index.push_back(i);
  }
 }
 
查找小于某个值的第一个索引min(find(a<target)) for (int i = 0; i < a.size(); i++) {
  if (a[i] < target) {
   index = i;
   break;
  }
 }
 
查找小于某个值的最后一个索引max(find(a<target)) for (int i = 0; i < a.size(); i++) {
  if (a[i] < target) {
   index = i;
  }
 }
 
查找小于某个值的所有索引find(a<target) for (int i = 0; i < a.size(); i++) {
  if (a[i] <= target) {
   all_index.push_back(i);
  }
 }
 
向量运算加法v+wfor循环 
减法v-wfor循环 
乘法v.*wfor循环 
除法v./wfor循环 
向量函数求和sum(v)std::accumulate(v.begin(), v.end(), 0);//0是初始值 
均值mean(v)static_cast<double> std::accumulate(v.begin(), v.end(), 0)/v.size() 
标准差std(v)double variance = 0;
for (int i : vec) {
    variance += pow(i - mean, 2);
}
double stdev = sqrt(variance / vec.size());
 
中值median(v)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]; }
 
最大值[maxValue,index]=max(v)auto max_element = std::max_element(vec.begin(), vec.end());//返回的是迭代器
int max_value = *max_element;//*就得到最大值
 
最大值索引[maxValue,index]=max(v)int max_index = std::distance(vec.begin(), max_element); 
最小值[minValue,index]=min(v)auto min_element = std::min_element(vec.begin(), vec.end());//返回的是迭代器
int min_value = *min_element;//*得到最小值
 
最小值索引[minValue,index]=min(v)int min_index = std::distance(vec.begin(), min_element); 
排序sort(v)std::sort(vec.begin(), vec.end()) 
等差数列v=1:1:10int 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);
}
 
反转flip(v)reverse(v.begin(),v.end()); 
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Dfreedom.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值