【发布时间】:2021-11-27 04:13:03
【问题描述】:
我想擦除向量中的重复元素;我使用for 循环来检查向量中的下一个元素是否与迭代中的当前元素相同,如果为真则将其删除,但由于某种原因,它会删除最后一个元素而不是相等。
这是我的代码:
#include <string>
#include <vector>
#include <iostream>
using namespace std;
template <typename T> vector<T> uniqueInOrder(const vector<T>& iterable){
vector<T> coolestVector = iterable;
for (int i = 0; i < coolestVector.size(); i++)
{
if (coolestVector[i] == coolestVector[i+1]){
coolestVector.erase(coolestVector.begin()+i);
i--;
}
/*for (int i = 0; i < coolestVector.size(); i++)
{
cout<<coolestVector[i]<<", ";
}
cout<<i<<", ";
cout<<coolestVector.size();
cout<<endl;*/
}
for (int i = 0; i < coolestVector.size(); i++)
{
cout<<coolestVector[i]<<endl;
}
return coolestVector;
}
vector<char> uniqueInOrder(const string& iterable){
vector<char> coolVector = {};
for (int i = 0; i < iterable.size(); i++)
{
coolVector.push_back(iterable[i]);
}
const vector<char> realVector = coolVector;
uniqueInOrder(realVector);
}
int main(){
const string test = "AAAABBBCCDAABBB";
uniqueInOrder(test);
}
输出:
vector 0: A, A, A, B, B, B, C, C, D, A, A, B, B, B, iterator value -1, vector size 14
vector 0: A, A, B, B, B, C, C, D, A, A, B, B, B, iterator value -1, vector size 13
vector 0: A, B, B, B, C, C, D, A, A, B, B, B, iterator value -1, vector size 12
vector 1: A, B, B, B, C, C, D, A, A, B, B, B, iterator value 0, vector size 12
vector 1: A, B, B, C, C, D, A, A, B, B, B, iterator value 0, vector size 11
vector 1: A, B, C, C, D, A, A, B, B, B, iterator value 0, vector size 10
vector 2: A, B, C, C, D, A, A, B, B, B, iterator value 1, vector size 10
vector 2: A, B, C, D, A, A, B, B, B, iterator value 1, vector size 9
vector 3: A, B, C, D, A, A, B, B, B, iterator value 2, vector size 9
vector 4: A, B, C, D, A, A, B, B, B, iterator value 3, vector size 9
vector 4: A, B, C, D, A, B, B, B, iterator value 3, vector size 8
vector 5: A, B, C, D, A, B, B, B, iterator value 4, vector size 8
vector 5: A, B, C, D, A, B, B, iterator value 4, vector size 7
vector 5: A, B, C, D, A, B, iterator value 4, vector size 6
vector 5: A, B, C, D, A, iterator value 4, vector size 5
A
B
C
D
A
预期:
A
B
C
D
A
B
【问题讨论】:
-
您知道
coolestVector[(coolestVector.size()-1)+1]会调用未定义的行为,对吗? ;) -
了解
std::unique。 -
您注释掉的诊断是一个好方法。但是,我会将它放在循环的开头而不是结尾。这使您可以查看进入
if语句的数据,因此您可以更好地判断coolestVector[i] == coolestVector[i+1]在最后一个元素被删除之前应该评估什么;也就是说,当coolestVector包含A, B, C, D, A, B,而i是5。 (这个六元素数组的第六个和第七个元素是什么?它们相等吗?)
标签: c++ loops for-loop vector std