vector作为C++中std类下非常常用的一个容器,特点是可以如同数组一样通过下标快速访问元素,同时比数组更加灵活更加方便。
在vector的添加元素很简单,可以直接通过push_back在容器的最后位添加进去,插入的话应该也可以通过insert来插入其中某个位置。这个我还没有尝试过。不过既然能够添加元素,就应该也能够删除元素。
然而在网上找寻的都是vector<int>类型的简单型容器,容器内部只是int型数字,所以当看到删除的时候也不是很清楚是什么原理,而且我需要做二维vector较为麻烦的一个容器的删除,在尝试中也总是出现报错。最后通过一些其他的思路解决了报错的问题。
针对指定某种元素,这里有两种方式可以去做删除。
方式一:
vector<vector<QString> > g_vvStrCvrectName; //定义
vector<QString> cvrectn;
g_vvStrCvrectName.push_back(cvrectn);// 插入元素
vector<QString> cvrectname = g_vvStrCvrectName[0];
auto it = std::find(g_vvStrCvrectName.begin(), g_vvStrCvrectName.end(), cvrectname); // 找寻元素
g_vvStrCvrectName.erase(it); // 删除元素
方式一主要是先找到内容,再根据内容进行寻找要删除的位置,这个方式其实比较适合相同内容的删除。然后里面最主要的其实就是auto类型,这个类型是C++11里面的内容,当不知道输出的元素为什么类型的时候便可以用auto类型。因为我是用QT编写的,所以QT在用到C++11的内容的时候,需要在pro文件里面添加:
CONFIG += C++11
当然,也可以不用auto类型,auto类型只是之前不知道类型所以才会这样定义,正确的定义如下代码。代码里也用了第二种方式来删除。第二种方式更为快捷,类似于下标的方式,直接通过指定标定的数据位置进行删除。
方式二:
vector<vector<QString> > g_vvStrCvrectName; //定义
vector<QString> cvrectn;
g_vvStrCvrectName.push_back(cvrectn);// 插入元素
g_vvStrCvrectName.push_back(cvrectn);// 插入元素
int num = 1;
vector<vector<QString> >::iterator it = g_vvMatCvrect.begin() + num;
g_vvStrCvrectName.erase(it); // 删除元素
其实it的定义没有多么复杂,只是我因为是二维vector所以有点绕晕了。变量it的类型的定义是需要和你要删除的vector的类型是一致的,而不是要删除的内容的类型,然后再在后面加上::iterator即可。