簡體   English   中英

如何刪除向量元素 c++

[英]how to remove a vector element c++

我正在嘗試使用兩個類創建一個記錄列表。 一個enterrecords輸入記錄用於輸入值,而其他 class records用於收集、組織和打印它們。 這是我的代碼:

#include <iostream>
#include <cstdlib>
#include <cmath>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

class enterrecords
{
    public:
    string name;
    int age;
    string color;

    enterrecords() 
    {
        name = "";
        age = 0;
        color = "";
    }
    enterrecords(string n, int a, string b) 
    {
        name = n;
        age = a;
        color = b;
    }

};
class records
{
    public:
    vector <enterrecords> list;
    records()
    {

    }
    void addtolist(const enterrecords s)
    {
        this->list.push_back(s);
    }
    void print()
    {
        rank();
        cout << endl;
        for (const auto& it : this->list)
        {
            cout << it.name << " " << it.age << " " << it.color << endl;
        }
        cout << endl;
    }
    void rank()
    {
        sort(list.begin(), list.end(), [](const auto& r1, const auto& r2) {return r1.age < r2.age; });
    }
    void remove(int r)
    {
        list.erase(list.begin() + r-1);
    }
};

int main() 
{
    enterrecords s1;
    enterrecords s2;
    enterrecords s3;
    enterrecords s4;
    records c1;
    s1 = enterrecords("john", 21, "pink");
    s2 = enterrecords("male", 25, "orange");
    s3 = enterrecords("rob", 23, "blue");
    s4 = enterrecords("casie", 31, "red");
    c1.addtolist(s1);
    c1.addtolist(s2);
    c1.addtolist(s3);
    c1.addtolist(s4);
    c1.print();
}

上面的代碼自動將人們從最年輕到最年長排序。 然而,問題是只有30歲及以下的人才能在記錄名單上。 任何 31 歲及以上的人都將被忽略或刪除他們的記錄。 所以如果我做了c1.addtolist(s4) ,它應該使他們的記錄無效。 理想情況下, s4將從包含所有記錄元素的向量中刪除。

這是這個程序的當前output:

john 21 pink

rob 23 blue

male 25 orange

casie 31 red

這將是程序所需的 output:

john 21 pink

rob 23 blue

male 25 orange

請幫忙。 先感謝您。

像這樣的東西:

list.erase(
    remove_if(
        list.begin(),
        list.end(),
        [] ( enterrecords t )
{
    return( t.age > 30 );
} ),
list.end() );

請注意,有一個名為“list”的 STL 容器。 調用您的記錄向量list有點令人困惑。

這是完整的程序代碼

#include <iostream>
#include <cstdlib>
#include <cmath>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

class enterrecords
{
public:
    string name;
    int age;
    string color;

    enterrecords()
    {
        name = "";
        age = 0;
        color = "";
    }
    enterrecords(string n, int a, string b)
    {
        name = n;
        age = a;
        color = b;
    }

};
class records
{
public:
    vector <enterrecords> myRecords;
    records()
    {

    }
    void add(const enterrecords& s)
    {
        myRecords.push_back(s);
    }
    void print()
    {
        remove();
        rank();
        cout << endl;
        for (const auto& it : myRecords)
        {
            cout << it.name << " "
                 << it.age << " "
                 << it.color << endl;
        }
        cout << endl;
    }
    void rank()
    {
        sort(myRecords.begin(), myRecords.end(),
             [](const auto& r1, const auto& r2)
        {
            return r1.age < r2.age;
        });
    }
    void remove()
    {
        myRecords.erase(
            remove_if(
                myRecords.begin(),
                myRecords.end(),
                [] ( enterrecords t )
        {
            return( t.age > 30 );
        } ),
        myRecords.end() );
    }
};

int main()
{
    records c1;
    c1.add(enterrecords("john", 21, "pink"));
    c1.add(enterrecords("male", 25, "orange"));
    c1.add(enterrecords("rob", 23, "blue"));
    c1.add(enterrecords("casie", 31, "red"));
    c1.print();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM