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

标签 c++ iterator

// 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/

相关文章:

c++ - 在 vector 中查找对象时出错

Scala - Iterator.toList 的奇怪行为

rust - 实现不消耗的迭代器

python - 连接两个列表的笛卡尔积的字符串(最好没有 for 循环)

C++ 仅使用#iostream 检查输入是否为 float

c++ - C++0x 中的新 unicode 字符

java - 在 SWIG 接口(interface)上找不到 C++ 类

c++ - 如何正确实现自定义迭代器和 const_iterators?

c++ - 一个图书馆强制我在全局范围内重载新的/删除的!

c++ - 更改模型后 View 未更新