操作类别 | 注释 | Matlab | C++ |
创建 | 创建一维数组常量 | v = [1, 2, 3, 4, 5]; | std::vector<int> v = {1, 2, 3, 4, 5 }; |
创建全为0的一维数组 | v = zeros(1, 3) | std::vector<int> v(length);//初始化 std::fill(v.begin(), v.end(), 0); | |
创建全为1的一维数组 | v = ones(1, 3); | std::vector<int> v(length);//初始化 std::fill(v.begin(), v.end(), 0); | |
访问 | 访问第i个元素 | v(i) | v[i] |
切片,第i到j个元素 | v(i:j) | std::vector<int> vec(v.begin() + i, v.begin() + j)//新生成v的子数组vec | |
数组运算 | 加法 | v+w | for循环 |
减法 | v-w | for循环 | |
乘法 | v.*w | for循环 | |
除法 | v./w | for循环 | |
数组函数 | 求和 | 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:10 | 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); } | |
数组元素操作 | 在开头增加一个元素 | [target,v] | vec.insert(vec.begin(), target) |
在末尾增加一个元素 | [v,target]或者v(end+1)=target | vec.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)=target | v[i]=target | |
某一段元素赋予同一个值 | v(i:j)=target | std::fill(vec.begin() + i, vec.begin() + j, target)//不包括j | |
查找大于某个元素的第一个索引 | min(find(v=<target)) | auto it = std::find(vec.begin(), vec.end(), target); int index = std::distance(vec.begin(), it); | |
查找小于某个元素的最后一个索引 | max(find(v<=target)) | auto it = std::upper_bound(vec.begin(), vec.end(), target); int index = std::distance(vec.begin(), it-1); | |
查找大于某个元素的第一个索引 | min(find(v>=target)) | auto it = std::lower_bound(vec.begin(), vec.end(), target); int index = std::distance(vec.begin(), it); |