我有一个char类型的向量;
vector<char> a_chars;
它包含6个字符,但其中3个是重复的。 如何删除重复的char?这是我当前的代码,它没有编译:
for(int i = 0; i < a_chars.size(); i++)
{
char current = a_chars.at(i);
for(int j = i+1; j < a_chars.size(); j++)
{
if (current == a_chars.at(j))
{
a_chars.erase[j];
}
}
}
这是编译错误:“C:无效类型'[int]'对于数组下标|”
编辑:
此外,我尝试使用a_chars.erase(j)
和a_chars.erase(a_chars.at(j)
,但仍然存在编译错误。
答案 0 :(得分:3)
您可以将std::unique
与vector::erase
方法结合使用(称为erase-remove idiom)。但是,矢量必须进行排序。
vector<char> a_chars;
std::sort(a_chars.begin(), a_chars.end());
a_chars.erase(std::unique(a_chars.begin(), a_chars.end()), a_chars.end());
如果您不想对vector
进行排序。您可以使用以下代码段删除重复项。
void remove_duplicities(std::vector<char>& vec)
{
for (auto iter = vec.begin(); iter != vec.end(); ++iter)
{
for (auto jter = std::next(iter); jter != vec.end(); ++jter)
{
if (*iter == *jter)
jter = std::prev(vec.erase(jter));
}
}
}
答案 1 :(得分:0)
经过一番尝试,我发现了自己。
它不适用于a_chars.erase[j];
,也不适用a_chars.erase(j);
a_chars.erase(a_chars.at(j));
。我所要做的就是创建一个迭代器并使其与'j'相同。
vector<char>::iterator itr = a_chars.begin();
itr+=j;
a_chars.erase(itr);