本文记录了对C++中的vector容器的简单操作,包括给vector添加元素、按指定列排序、取值。
文章目录
- 一、vector 和普通数组之间的转化
- 二、根据vector数组的某一列数据排序
- 三、删除二维 vector 数组最后一列数据
一、vector 和普通数组之间的转化
1,数组转vector
double ptProjected[4] = {1.1, 1.2, 1.3, 5.0};
vector<double> vecProjected(ptProjected, ptProjected + sizeof(ptProjected) / sizeof(double));
2,vector转数组
由于vector内部的数据是存放在连续的存储空间,vector转数组事实上只需要获取vector中第一个数据的地址和数据的长度即可。如果仅仅是传参,无需任何操作,直接传地址即可,如果要进行数据复制,可以借用内存拷贝函数“memcpy”。例如:
double *buffer = new double [sizeof(arrHeight)];
if (!vecHeight.empty())
{
memcpy(buffer, &vecHeight[0], vecHeight.size()*sizeof(double));
}
二、根据vector数组的某一列数据排序
如图所示,红框内是原始数组,蓝框内是根据第四列数字从小到大排序后的数组。
#include "stdafx.h"
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
vector<double> a = { 1,5,8,1 };
vector<double> b = { 7,8,3,3 };
vector<double> c = { 4,6,5,2 };
vector<double> d = { 4,6,5,0 };
//普通数组转换为vector数组
double ptProjected[4] = {1.1, 1.2, 1.3, 5.0};
vector<double> vecProjected(ptProjected, ptProjected + sizeof(ptProjected) / sizeof(double));
//将一维数组加入二维数组中
vector< vector<double> > vecTest;
vecTest.push_back(a);
vecTest.push_back(b);
vecTest.push_back(c);
vecTest.push_back(d);
vecTest.push_back(vecProjected);
//排序所用到的列的维度,本例子根据第4列排序
int dimension = 3;
//根据第4列排序
sort(vecTest.begin(), vecTest.end(), [&dimension](vector<double> &a, vector<double> &b) {
return a[dimension]>b[dimension];
});
//打印排序后的数组
for (auto item : vecTest) {
for (auto num : item) {
cout << num << "\t";
}
cout << endl;
}
system("pause");
return 0;
}
三、删除二维 vector 数组最后一列数据
如图所示,红色框内数组是4列,蓝框内是删除了最后一列的数组。
//接上一节代码
//删除最后一个元素
vector< vector<double> > result;
for (auto pVoxel : test) {
pVoxel.pop_back();
result.push_back(pVoxel);
}
//打印删除最后一个元素后的result数组
for (auto item : result) {
for (auto num : item) {
cout << num << "\t";
}
cout << endl;
}