从带有size_type索引的std vector中删除将导致编译器错误
Erasing from std vector with size_type index results in compiler error?
// 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
向量中。students
是包含将通过
一切正常,但是当我从
更改以下行时students.erase(students.begin() + i);
students.erase(i);
我得到以下编译错误:
错误:调用std::vector, std::allocator>::erase(size_t&)'没有匹配的函数
尽管我认为它们在功能上是一样的。有人能解释一下是什么原因吗?
"no matching function for call"基本上说明了一切。没有这种以"size_t"作为参数的擦除函数。这就是为什么会出现看似奇怪的students.erase(students.begin() + i);
的全部原因。
应该使用迭代器遍历vector对象。所以你可以调用iterator = students.erase(it),它会给你正确的迭代器来继续。像这样for( vector<Student_info>::itreator it; = students.begin(), it != students.end(); it++)
{
if(fgrade(*it))
{
fail.push_back(*it);
it = students.erase(it);
}
}
相关文章:
- 析构函数删除错误的元素
- LinkedList removePosition 删除错误的元素
- 如何在为类创建 .h 和 .cpp 文件后删除错误?C++
- 使用C++类时出现巨大的删除错误
- C++解释此删除[]错误
- shared_ptr C++出现双重删除错误
- 如何删除错误:"." 标记之前的预期主表达式
- DoublyLinkedList删除错误
- 我使用构造函数(使用内存 Dinamic char *t = 新字符 [10] t = "test123456" ;))时遇到错误堆错误并在析构函数中删除 [] t;错误
- 分配字符串时出现 char* 新建和删除 [] 错误
- C++模板代码导致在显然未正确分配的对象上调用删除错误
- C++删除错误
- c++ STL删除错误
- 从二叉树中删除错误
- 矢量擦除函数删除错误的对象
- 二进制结构删除错误
- 如何从FLANNBASED匹配器在OPENCV中删除错误的匹配
- map删除错误的元素
- 使用 std::删除删除错误的字符
- c++ pair删除错误