c++ - 如何在 C++ 中对 vector 进行切片并分配给自身?

标签 c++ c++11 visual-c++ vector subset

我想知道如何在不重新分配新 vector 的情况下用该 vector 的子集替换 vector 的内容(我发现的每个问题似乎都有分配新 vector 的目的)

例子:

vector<int>* testVec = new vector<int>{1, 2, 3, 4, 5};
//do some operation to slice vector, to say {2, 3, 4} without re-allocating
//testVec should now have contents {2, 3, 4}

最佳答案

问题在使用范围上并不清楚,但是两次调用 std::vector::erase 就足够了,不会导致任何重新分配。

以你的例子为例:

std::vector<int> testVec{1, 2, 3, 4, 5};
testVec.erase(testVec.begin() + 4, testVec.end());
testVec.erase(testVec.begin(), testVec.begin() + 1);

通过首先移除 vector 的尾部,您可以确保值只移动一次。

Here is the full code .

请注意,我假设您实际上不需要使用指向 std::vector 的指针。

关于c++ - 如何在 C++ 中对 vector 进行切片并分配给自身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37575163/

相关文章:

c++ - DLL 中声明的全局变量会怎样?

c++ - Windows:基于事件的重叠 IO 与 IO 完成端口,真实世界性能

c++ - C 和 C++11 中系统时钟的性能

c++ - 如何制作正则表达式。什么都吃?

c++ - 如何删除 vector 中与另一个 vector 中的某些元素匹配的元素

visual-c++ - 在 VC++ 中,#pragma 等效于/O2 编译器选项是什么(优化速度)

c++ - 为Tab Control处理WM_PAINT事件也需要手动绘制项目?

c++ - 无法弄清楚错误的来源(调试器说段错误)

c++ - 显然模棱两可的调用不会导致 GCC 上的编译错误

c++ - 在 VC++ 中确定未初始化的变量