[英]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.