删除列表c ++中的最后3个元素

哈德尔 A.

我有这个 C++ 代码,它可以很好地删除列表的最后 3 个元素,但我想知道这是否是执行此操作的正确方法,因为我担心删除带有迭代器问题的元素。该代码基本上采用 6 个元素“Groups”的列表,将其分为 2 个较小的列表“Group1”和“Group2”,然后将不同的列表“GroupToCompare”与“Group2”进行比较,如果它们相等,则删除最后一个“组”的3个要素。

#include "pch.h"
#include <iostream>
#include <iostream>
#include <string>
#include <list>
using namespace std;

int main()
{
    std::list <string> Groups = {};
    Groups = { "Spike", "Jet", "Faye", "Edward", "Vincent", "Elektra" };
    std::list<string> Group1 = {};
    std::list<string> Group2 = {};
    std::list<string> GroupToCompare = {};
    GroupToCompare = { "Edward", "Vincent", "Elektra" };

    size_t half1 = Groups.size() / 2;
    std::list<std::string>::iterator ig = Groups.begin();
    advance(ig, half1);
    Group1.insert(Group1.end(), Groups.begin(), ig);
    Group2.insert(Group2.end(), ig, Groups.end());

    std::list<std::string>::iterator removeIt = Groups.begin();
    advance(removeIt, half1);

    cout << "List Elements 1: " << endl;
    std::list<string>::iterator itrofList = Group1.begin();
    string firstvar;
    for (itrofList = Group1.begin(); itrofList != Group1.end(); ++itrofList) {
        firstvar = *itrofList;
        cout << "Item: " << firstvar << endl;
    }

    cout << "List Elements 2: " << endl;
    std::list<string>::iterator itrofList1 = Group2.begin();
    string firstvar1;
    for (itrofList1 = Group2.begin(); itrofList1 != Group2.end(); ++itrofList1) {
        firstvar1 = *itrofList1;

        cout << "Item: " << firstvar1 << endl;
    }

    if (Group2 == GroupToCompare) {
        removeIt = Groups.erase(removeIt);
        removeIt = Groups.erase(removeIt);
        removeIt = Groups.erase(removeIt);
    }

    cout << "List Elements of Groups after removing the last 3 elements: " << endl;
    std::list<string>::iterator itrofList2 = Groups.begin();
    string firstvar2;
    for (itrofList2 = Groups.begin(); itrofList2 != Groups.end(); ++itrofList2) {
        firstvar2 = *itrofList2;

        cout << "Item: " << firstvar2 << endl;
    }


}

如果我想删除列表末尾的更多元素并避免删除迭代器的问题,是否有更正确的方法?提前致谢!

YSC

尽管std::list::erase()使用返回的位置多次调用有效,调用正确的重载将有助于提高可读性和可能的​​性能:

iterator erase( iterator first, iterator last );

例子:

std::list<int> l{1, 2, 3, 4, 5};
l.erase(std::prev(l.end(), 3), l.end());
// l is {1, 2}

注意:按原样,如果l大小不小于 3 ,此代码会表现出未定义的行为

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

删除列表c ++中的最后3个元素

来自分类Dev

如何删除C ++中添加到链接列表中的最后一个元素

来自分类Dev

列表中x元素的最后3个元素的和,作为新列表[python 3]

来自分类Dev

如何从Prolog列表中删除最后n个元素?

来自分类Dev

从列表C中删除元素

来自分类Dev

从C ++中的集合中删除最后一个元素

来自分类Dev

删除列表的最后一个元素

来自分类Dev

Python-如何删除列表列表中的最后一个元素?

来自分类Dev

Python:从列表列表中删除最后一个元素?

来自分类Dev

Python-如何删除列表列表中的最后一个元素?

来自分类Dev

Python:从列表列表中删除最后一个元素?

来自分类Dev

从Haskell的列表中删除第一个和最后一个元素

来自分类Dev

从列表向量中删除元素C ++

来自分类Dev

从列表向量中删除元素C ++

来自分类Dev

从嵌套列表C#中删除元素

来自分类Dev

使用递归C ++从列表中删除元素

来自分类Dev

无法删除 C++ 中的列表元素

来自分类Dev

从C中的列表中删除

来自分类Dev

在不破坏括号格式的情况下删除列表中的最后一个元素(括号)

来自分类Dev

如何在python中删除编号列表的最后一个元素的尾随换行符?

来自分类Dev

在不破坏括号格式的情况下删除列表中的最后一个元素(括号)

来自分类Dev

从列表中删除重复项:保留顺序和每个元素的最后一个重复项

来自分类Dev

python获取列表列表中的最后5个元素

来自分类Dev

从C ++列表中删除对象

来自分类Dev

从列表C ++中删除对象

来自分类Dev

从C ++列表中删除项目

来自分类Dev

在C中删除链接列表

来自分类Dev

从C#中的列表内的列表中删除元素。

来自分类Dev

从数组中删除最后一个元素

Related 相关文章

热门标签

归档