为什么我无法删除std::vector中指定范围的元素?
错误原因
std::vector的erase成员函数不接受整数下标作为入参,要求传入的参数是迭代器类型。你直接传入两个整数0和r,标准库没有对应的重载函数,因此编译器报匹配失败的错误。
正确用法
erase删除区间的重载接收两个迭代器,构成左闭右开区间[起始迭代器, 结束迭代器),即起始迭代器指向的元素会被删除,结束迭代器指向的元素不会被删除。
如果你需要删除下标0到下标r(包含两端)的所有元素,正确写法如下:
int r = 100; master.erase(master.begin(), master.begin() + r + 1);
如果你需要删除的是下标0到下标r-1的元素(即总共删除r个元素),则将第二个参数改为master.begin() + r即可。
补充说明
标准库设计所有容器的增删接口都统一使用迭代器作为参数,是为了抹平不同容器的访问特性差异,让通用算法可以适配所有标准容器,不需要为支持下标访问的容器单独做接口兼容。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

