从字符串向量中删除元素

时间:2014-03-03 10:18:59

标签: c++ string vector

在我的计划中,我创建了vector string类型(vector<string> names;)。 在将一些值放入其中后,我遇到了我希望从中删除元素的情况。我知道我可以通过键入:names.erase(<pointer to the element to be erased>);

来完成此操作

然而,我唯一知道的是我希望删除元素ii是循环中的计数器)。 i'位置的起始位置(指针)是未知的,因为向量是一个字符串(即如果它是一个int向量我可以做:

names.erase(names.begin()+i*sizeof(int))

有人请解释我如何在i'元素的内存中找到位置,或者通常如何在不知道其位置的情况下擦除i'元素。

3 个答案:

答案 0 :(得分:2)

元素的大小无关紧要。 names.begin() + i为您提供向量的i元素的迭代器。您不能以字节步长移动迭代器 - 您一次沿着元素移动它。

如果你有names.begin() + i * sizeof(int)的向量,你绝对不应该int。即使你不得不像这样添加大小的字节大小,std::string对象的大小总是固定的,无论字符串的长度如何。那是sizeof(std::string)是一个常数值。事实上,任何类型的大小都是用C ++修复的。

答案 1 :(得分:1)

你绝对应该使用迭代器来操纵向量。 找到i元素的最简单方法是:

std::vector<string>::iterator l_it(names.begin());
l_it += i;

还要小心擦除,因为std::vector::erase重定位数组的其余部分(并移动索引)。​​

http://www.cplusplus.com/reference/vector/vector/erase/

答案 2 :(得分:0)

需要使用迭代器,如下所示

        vector<string>::iterator lIter = lStrVec.begin();
        lIter = (lIter + (i-1));
        lStrVec.erase(lIter);

注意,如果yu需要擦除第i个元素,则通过i-1

向前移动迭代器