c++在不重新分配的情况下擦除vector末端的部分
C++ erasing part of the end of a vector without reallocation
查看c++ vector文档,pop_back()是一个不会导致vector数据重新分配的函数。然而,这只适用于删除向量的一个成员。我试图找到一种方法来擦除多个成员从一个向量的结束。最初我以为我会在一个小的for循环中调用pop_back(),但我在徘徊是否有一个更方便的函数可以为我做这件事?
编辑:Cplusplus的vector erase()引用并不像juanchopanza指出的那样清晰。这就是为什么我最初放弃使用erase()。最后擦除,效果很好
使用vector::erase
。它不会重新分配内存。
如果擦除的范围没有扩展到容器的末尾,它将重新定位结束元素。这意味着结束元素将被move
d到它们在内存中的适当位置,这可能会导致数据复制。这与重新分配后备存储不同。如果结束元素是myVector.end()
,则不需要进行重新定位。
可以使用成员函数erase
。vector将不会被重新分配,因为根据c++标准,例如c++ 17 n4659标准草案26.3.11.5 [vector。修饰符]"矢量修饰符";
使位于擦除符位置或之后的迭代器和引用失效。iterator erase(const_iterator position); iterator erase(const_iterator first, const_iterator last);
引号的粗体部分表示vector将不会被重新分配。
相关文章:
- 在没有太多条件句的情况下,我如何避免被零除
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 在未初始化映射的情况下,将值插入到映射的映射中
- 是默认情况下分配给char数组常量的值
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在已经使用Git的情况下减少编译时间
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 如何在不使用System()的情况下使用C 删除除最后10个文件外的所有文件
- 如何在不修改现有函数的情况下反转数组中除第一个和最后一个元素之外的所有元素
- 在没有c++11的情况下,擦除映射中最后插入的元素的正确方法是什么
- 关于使用 c++ 代码将数据从一行移动到下一行以擦除第一行数据
- 如何在不擦除 Windows 上C++中的其他属性的情况下隐藏/取消隐藏文件
- 矢量迭代器在条件下擦除两个元素
- 迭代器擦除 (迭代器在先,迭代器最后) 在 Visual C++ 2010 Express 下不起作用
- 在给定布尔向量的情况下,如何从C++特征数组中移除某些系数
- c++在不重新分配的情况下擦除vector末端的部分
- 在这种情况下如何擦除向量元素
- 在没有boost和c++0x的情况下安全地进行类型擦除
- 文件处理C++,在ios::app模式下打开,文件被擦除