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

慈云数据 1年前 (2024-03-15) 技术支持 65 0
操作类别注释MatlabC++
创建创建一维数组常量v = [1, 2, 3, 4, 5];std::vector v = {1, 2, 3, 4, 5 };
创建全为0的一维数组v = zeros(1, 3)std::vector v(length);//初始化
std::fill(v.begin(), v.end(), 0);
创建全为1的一维数组v = ones(1, 3);std::vector v(length);//初始化
std::fill(v.begin(), v.end(), 0);
访问访问第i个元素v(i)v[i]
切片,第i到j个元素v(i:j)std::vector vec(v.begin() + i, v.begin() + j)//新生成v的子数组vec
数组运算加法v+wfor循环
减法v-wfor循环
乘法v.*wfor循环
除法v./wfor循环
数组函数求和sum(v)std::accumulate(v.begin(), v.end(), 0);//0是初始值
均值mean(v)static_cast std::accumulate(v.begin(), v.end(), 0)/v.size()
标准差std(v)double variance = 0;

for (int i : vec) {

数组常用操作对照表——matlab和C++(vector)
(图片来源网络,侵删)

    variance += pow(i - mean, 2);

}

数组常用操作对照表——matlab和C++(vector)
(图片来源网络,侵删)

double stdev = sqrt(variance / vec.size());

中值median(v)std::sort(vec.begin(), vec.end());

double median;

if (vec.size() % 2 == 0)

{ median = static_cast(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 vec;

for (int i = 0; i

    vec.push_back(start + i * diff);

}

数组元素操作在开头增加一个元素[target,v]vec.insert(vec.begin(), target)
在末尾增加一个元素[v,target]或者v(end+1)=targetvec.push_back(target)或者vec.insert(vec.end(), target)
在i个位置增加一个元素[v(1:i-1),target,v(i:end)]vec.insert(vec.begin()+i, target)
在i个位置增加一个向量[v(1:i-1),v_new,v(i:end)]vec.insert(vec.begin()+i, vec_new.begin(), vec_new.end())
删除某个元素v(condition)=[];eg.  v(v==target)=[]vec.erase(std::remove(vec.begin(), vec.end(), target), vec.end())

//remove,将要删除的元素移到末尾,并指向新的逻辑结尾的迭代器

删除某个索引的元素v(i)=[]vec.erase(vec.begin() + i)
删除某段元素v(i:j)=[]vec.erase(vec.begin() + i,vec.begin() + j)//不包括j
对某一个元素进行赋值v(i)=targetv[i]=target
某一段元素赋予同一个值v(i:j)=targetstd::fill(vec.begin() + i, vec.begin() + j, target)//不包括j
查找大于某个元素的第一个索引min(find(v=
微信扫一扫加客服

微信扫一扫加客服