在我的计划中,我创建了vector
string
类型(vector<string> names;
)。
在将一些值放入其中后,我遇到了我希望从中删除元素的情况。我知道我可以通过键入:names.erase(<pointer to the element to be erased>);
然而,我唯一知道的是我希望删除元素i
(i
是循环中的计数器)。 i
'位置的起始位置(指针)是未知的,因为向量是一个字符串(即如果它是一个int向量我可以做:
names.erase(names.begin()+i*sizeof(int))
有人请解释我如何在i
'元素的内存中找到位置,或者通常如何在不知道其位置的情况下擦除i
'元素。
答案 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
重定位数组的其余部分(并移动索引)。
答案 2 :(得分:0)
需要使用迭代器,如下所示
vector<string>::iterator lIter = lStrVec.begin();
lIter = (lIter + (i-1));
lStrVec.erase(lIter);
注意,如果yu需要擦除第i个元素,则通过i-1
向前移动迭代器