gpt4 book ai didi

c++ - 使用 size_type 索引从 std vector 中删除会导致编译器错误?

转载 作者:行者123 更新时间:2023-11-28 08:13:30 25 4
gpt4 key购买 nike

// second try: correct but potentially slow
vector<Student_info> extract_fails(vector<Student_info>& students)
{
vector<Student_info> fail;
vector<Student_info>::size_type i = 0;

// invariant:elements [0, i) of students represent passing grades
while (i != students.size())
{
if (fgrade(students[i]))
{
fail.push_back(students[i]};
students.erase(students.begin() + i);
} else
++i;
}
return fail;
}

以上代码来自《Accelerated C++》一书,会计算用户分数。根据不及格或及格的成绩,将结果放入未及格学生的 fail vector 中。 students 是包含将通过考试的学生的 vector

一切都很好,但是当我更改以下行时

students.erase(students.begin() + i);

students.erase(i);

我收到以下编译器错误:

error: no matching function for call to 'std::vector, std::allocator>::erase(size_t&)'

尽管我认为它们在功能上是相同的。谁能解释一下这是什么原因造成的?

最佳答案

“调用无匹配函数”基本上说明了一切。没有这种以“size_t”作为参数的删除函数。这就是可能看似奇怪的 students.erase(students.begin() + i); 首先出现的全部原因。

关于c++ - 使用 size_type 索引从 std vector 中删除会导致编译器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8396991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com