C++ 空整数向量中的push_是否用意外值填充?

C++ 空整数向量中的push_是否用意外值填充?,c++,vector,stl,C++,Vector,Stl,现在,在第一次迭代之后: N vector : 21 9 5 8 10 Q = 10 但预期的S向量是: N vector : 21 10 S vector : 0 9 8 9 5 8 为什么会得到意外的S向量值?如果您的目标是从满足特定条件的向量中删除项,并将这些删除的项添加到另一个向量,则使用STL算法函数将完成此任务,而不是编写循环: S vector : 9 5 8 #包括 整个想法是使用分区算法。在本例中,我用于返回一个迭代器,该迭代器对分区向量进行分割 分区点由谓词(n

现在,在第一次迭代之后:

N vector : 21 9 5 8 10
Q = 10
但预期的S向量是:

N vector : 21 10
S vector : 0 9 8 9 5 8 

为什么会得到意外的S向量值?

如果您的目标是从满足特定条件的向量中删除项,并将这些删除的项添加到另一个向量,则使用STL算法函数将完成此任务,而不是编写循环:

S vector : 9 5 8
#包括

整个想法是使用分区算法。在本例中,我用于返回一个迭代器,该迭代器对分区向量进行分割


分区点由谓词(
n
)确定。分区左侧的任何内容都满足
n
,否则值放在分区右侧。

可能您不理解
向量n(n)
n
零填充向量?@M.M我说的是
向量S
.vector::erase使迭代器无效,基于范围的for循环使用迭代器-您有未定义的行为您试图完成的任务不需要循环。您只需要三个算法函数调用。请阅读
std::partition
std::stable_partition
S vector : 9 5 8
#include <algorithm>
#include <vector>
#include <iterator>

int main()
{
    std::vector<int> N = { 32, 10, 22, 100, 210, 1};
    std::vector<int> S;
    int Q = 100;

    // partition the items
    auto it = std::stable_partition(N.begin(), N.end(), [&](int n) { return n < Q;});

    // copy items from left partition to the vector
    std::copy(N.begin(), it, std::back_inserter(S));

    // erase items in left partition
    N.erase(N.begin(), it);
}