操作类别 | 注释 | Matlab | C++ | 备注 |
创建 | 创建空向量 | 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+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); } | ||
反转 | flip(v) | reverse(v.begin(),v.end()); |
数组常用操作对照表——matlab和C++(vector)
于 2024-03-11 09:59:13 首次发布