ฉันต้องการล้างองค์ประกอบจากเวกเตอร์โดยใช้วิธีการลบ แต่ปัญหาที่นี่คือไม่รับประกันว่าองค์ประกอบจะเกิดขึ้นเพียงครั้งเดียวในเวกเตอร์ อาจมีอยู่หลายครั้งและฉันจำเป็นต้องล้างทั้งหมด รหัสของฉันเป็นดังนี้:
void erase(std::vector<int>& myNumbers_in, int number_in)
{
std::vector<int>::iterator iter = myNumbers_in.begin();
std::vector<int>::iterator endIter = myNumbers_in.end();
for(; iter != endIter; ++iter)
{
if(*iter == number_in)
{
myNumbers_in.erase(iter);
}
}
}
int main(int argc, char* argv[])
{
std::vector<int> myNmbers;
for(int i = 0; i < 2; ++i)
{
myNmbers.push_back(i);
myNmbers.push_back(i);
}
erase(myNmbers, 1);
return 0;
}
เห็นได้ชัดว่าโค้ดนี้ขัดข้องเพราะฉันกำลังเปลี่ยนจุดสิ้นสุดของเวกเตอร์ขณะที่ทำซ้ำ วิธีที่ดีที่สุดในการบรรลุเป้าหมายนี้คืออะไร? มีวิธีใดบ้างที่จะทำสิ่งนี้โดยไม่ต้องทำซ้ำผ่านเวกเตอร์หลาย ๆ ครั้งหรือสร้างสำเนาเวกเตอร์อีกหนึ่งชุด
std::remove()
เปลี่ยนองค์ประกอบเพื่อให้องค์ประกอบที่จะลบถูกเขียนทับ อัลกอริทึมจะไม่เปลี่ยนขนาดของคอนเทนเนอร์และหากn
องค์ประกอบถูกลบออกก็จะไม่ได้กำหนดว่าn
องค์ประกอบสุดท้ายคืออะไร