【问题标题】:Basic function removing repeated elements from a vector [duplicate]从向量中删除重复元素的基本功能[重复]
【发布时间】:2019-08-22 11:25:22
【问题描述】:

我正在做一个家庭作业项目,并且被这个功能所困扰。我需要使用<vector><set> 两次解决这个问题。我们只需要从作为参数传递的向量中消除重复元素。

这是我的第一次尝试。

vector<int> erase_repeating_elem(vector<int> s) {
    int len = s.size();
    for (int i = 0; i < len -1; i++) {
        for (int j = i + 1; i < len; j++) {
            if (s[i] == s[j]){
                s.erase (s.begin()+j);
                len--;
            }
        }
    }
    return s;
}

main(){
    vector<int> s = {1, 1, 2, 2, 3, 3};
    s = erase_repeating_elem(s);
    std::cout << "myvector contains:";
    for (unsigned i=0; i<s.size(); ++i)
        std::cout << ' ' << s[i];
    std::cout << '\n';
    return 0;
}

当我尝试运行它时,我得到了这个:Process returned -1073741819 &lt;0xC0000005&gt;

我认为当我擦除矢量元素时可能是内存问题,因为我不知道是否再次计算 s.size()。所以我尝试了这个:

vector<int> erase_repeating_elem(vector<int> s) {
    int len = s.size();
    for (int i = 0; i < len -1; i++) {
        for (int j = i + 1; i < len; j++) {
            if (s[i] == s[j]){
                s.erase (s.begin()+j);
                len--;
            }
        }
    }
    return s;
}

我得到相同的错误代码。我正在考虑解决这个问题的其他方法,也许将重复的元素交换到向量的后面,然后只使用pop_back()。但我认为我的解决方案,如果可行的话,会更好。

我在 Code::Blocks 上使用 cygwin 工具链,但我无法让调试器运行。有什么建议吗?

另外,在&lt;set&gt; 案例中处理它的正确方法是什么?我猜只是将元素添加到一个新集合中,让它自己处理重复的元素。

谢谢。

【问题讨论】:

  • 在这个循环中 for (int j = i + 1; i
  • A set&lt;T&gt; 已经是唯一的,那里没有重复项。我希望您想自己完整地写出代码,因为这是一项任务?否则你可以使用这个成语:v.erase(std::unique(v.begin(), v.end()), v.end());
  • 感谢来自莫斯科的弗拉德,现在我遇到了复制粘贴的问题...
  • 您可以使用&lt;algorithm&gt; 吗?例如“可能将重复的元素交换到向量的后面”正是std::unique 所做的。
  • 我不这么认为,他们只是让我们在整个分配中使用

标签: c++ vector set codeblocks


【解决方案1】:

In this loop for (int j = i + 1; i &lt; len; j++) in the condition there is used the variable i instead of j. – Vlad from Moscow 2 mins ago

感谢来自莫斯科的弗拉德发现我的愚蠢错误。

【讨论】:

    猜你喜欢
    • 2016-09-19
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 2017-03-04
    • 2013-05-20
    相关资源
    最近更新 更多