我有一个随机字符串作为元素的向量。我试图循环查找不是长度为2的字符串。如果它们不是2的长度,那么它应该从向量中删除。出于某种原因,我的代码并没有删除所有不长度为2的字符串。
我尝试过单独删除元素,但是当它处于循环中时,它似乎不适用于元素。
这是我的输出: 浩 AO 大声笑 光盘 EF WQ 哟
并且预期输出不应包含字符串" lol"
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector <string> numbers = {"ho","ao", "tom", "lol", "cd", "ef", "wq", "hello","yo","sup","boi"};
// loop deletes string elements from vector that don't have length of 2
for(int i=0; i < numbers.size(); i++){
if(numbers[i].length() != 2){
numbers.erase(numbers.begin() + i);
}
}
// this makes sure the last element in vector gets deleted
if( numbers[numbers.size() - 1].length() != 2 )
numbers.pop_back();
for(int i=0; i < numbers.size(); i++){
cout << numbers[i] << endl; // prints out vector elements
}
}
答案 0 :(得分:0)
当你第一次擦除时(在你擦除“tom”的情况下),下一个元素的id会减少,所以在下一次迭代中你不会检查“lol”的长度。
这不是最好的解决方案,但如果你的代码可以正常工作,你可以减少我。
if(numbers[i].length() != 2){
numbers.erase(numbers.begin() + i);
i--;
}
答案 1 :(得分:0)
这是因为在你擦除&#34; tom&#34;指数已经改变。
在删除之前&#34; tom&#34;
在
...
您可以通过减少i来修复它;
if(numbers[i].length() != 2){
numbers.erase(numbers.begin() + i);
i--;
}
或者你可以这样做
for( auto i = numbers.begin(); i != numbers.end(); )
{
if( i->length() != 2 ) i = numbers.erase(i); else ++i;
}