如何刪除A容器中,對應到B容器中的數字?

(1)Q.由於我想刪除特定元素很多,所以我用容器把它裝起來,但是因為不熟悉用法,又是初學c++...所以這個我怎麼寫都是錯的代碼,希望有大神可以幫我解惑,並修改程序,謝謝!
(2)以下是我的代碼:

int main()
{

list <string> cc;
list<string> tt = { "you","me","I" };
string words;
while (cin >> words) {
    cc.push_back(words);
    if (words == "Finish!")
        break;
}
auto it = cc.begin();
while (it != cc.end()) {
    it = cc.erase(tt.begin(), tt.end());
}
cout << "修改後的文章:" << endl;
for (auto &i : cc) {
    cout << i << " ";
}

}

阅读 1.8k
1 个回答

你这里用的不对,可以参考list::erase, erase里面的入参应该cc的迭代器.

t = cc.erase(tt.begin(), tt.end());

按照你的思路,正确的用法如下:

    list<string> list1;
    list<string> list2{"you", "me", "I"};

    istream_iterator<string> in(std::cin), eos;
    std::copy(in, eos, std::back_inserter(list1));

    std::cout<<"\n";
    ostream_iterator<string> out(std::cout, " ");
    std::copy(list1.begin(), list1.end(), out);

    for(auto &x : list2) {
        auto iter = std::find(list1.begin(), list1.end(), x);
        if(iter == list1.end()) continue;

        list1.erase(iter);
    }

    std::cout<<"\n";
    ostream_iterator<string> out1(std::cout, " ");
    std::copy(list1.begin(), list1.end(), out1);

另外提供一个思路,标准库中已提供了std::set_difference, 可以得到两个集合的差集,唯一不同的是,最终结果存放的容器需要单独提供,实现如下,因为list1的构造无论是标准输入还是直接构造,对差集的计算没啥影响,我直接构造了:

    list<string> list1{"me", "you", "helloWorld"};
    list<string> list2{"you", "me", "I"};
    list<string> resList;
    ostream_iterator<string> out1(std::cout, " ");

    list1.sort();
    list2.sort();
    std::copy(list1.begin(), list1.end(), out1);
    std::cout<<"\n";
    std::copy(list2.begin(), list2.end(), out1);
    std::cout<<"\n";
    std::set_difference(list1.begin(), list1.end(), 
            list2.begin(), list2.end(), 
            //std::inserter(resList, resList.begin()));
            std::inserter(resList, resList.end()));

    ostream_iterator<string> out2(std::cout, " ");
    std::copy(resList.begin(), resList.end(), out2);
    std::cout<<"\n";
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题