我想知道如何在不重新分配新 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 的尾部,您可以确保值只移动一次。
请注意,我假设您实际上不需要使用指向 std::vector
的指针。
关于c++ - 如何在 C++ 中对 vector 进行切片并分配给自身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37575163/