如何从vector <char>中删除元素?

时间:2015-10-18 17:50:09

标签: c++ vector

我有一个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),但仍然存在编译错误。

2 个答案:

答案 0 :(得分:3)

您可以将std::uniquevector::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);
相关问题