C++ 从容器中移动元素不会清空容器?

C++ 从容器中移动元素不会清空容器?,c++,c++11,C++,C++11,给定以下代码: #include <vector> #include <iostream> struct number { int n{666}; }; int main() { std::vector<number> vec; std::cerr << vec.size() << std::endl; number n; vec.push_back(n); std::cerr &l

给定以下代码:

#include <vector>
#include <iostream>

struct number {
    int n{666};
};


int main()
{
    std::vector<number> vec;
    std::cerr << vec.size() << std::endl;
    number n;
    vec.push_back(n);
    std::cerr << vec.size() << std::endl;
    auto b = std::move(vec.front());
    std::cerr << "b: " << b.n << std::endl;
    std::cerr << vec.size() << std::endl;
}

最后一个1不应该是0吗?

std::move甚至不知道它移动的东西是在一个容器中。向量拥有的内存块仍然存在,只是处于未指定的状态。由您来管理向量。

std::move甚至不知道它移动的东西是在一个容器中。向量拥有的内存块仍然存在,只是处于未指定的状态。由您来管理向量。

一旦您使用了前面的值,并且希望将其删除,则需要将其从向量中删除。我不会谈论前面返回一个ref,因为0x5453提到了这一点。但是没有理由使用std::move-there-所做的只是将值强制转换为右值引用,它实际上不会自行移动任何内容

#include <vector>
#include <iostream>

struct number {
    int n{666};
};

int main()
{
    std::vector<number> vec;
    std::cerr << vec.size() << std::endl;
    number n;
    vec.push_back(n);
    std::cerr << vec.size() << std::endl;

    // Since this is a ref, and your struct is simple - just copy
    auto b {vec.front()};
    // Now remove the element
    vec.erase(vec.begin());

    std::cerr << "b: " << b.n << std::endl;
    std::cerr << vec.size() << std::endl;
}

一旦你在前面使用了这个值,你想去掉它,你就需要从向量中删除它。我不会谈论前面返回一个ref,因为0x5453提到了这一点。但是没有理由使用std::move-there-所做的只是将值强制转换为右值引用,它实际上不会自行移动任何内容

#include <vector>
#include <iostream>

struct number {
    int n{666};
};

int main()
{
    std::vector<number> vec;
    std::cerr << vec.size() << std::endl;
    number n;
    vec.push_back(n);
    std::cerr << vec.size() << std::endl;

    // Since this is a ref, and your struct is simple - just copy
    auto b {vec.front()};
    // Now remove the element
    vec.erase(vec.begin());

    std::cerr << "b: " << b.n << std::endl;
    std::cerr << vec.size() << std::endl;
}

vec.front应该是n,它是数字的一个实例?把它变成一个回复?@0x5453:Ubs,你说得对。所以我已经删除的第一条评论是:移动数字并没有移动向量中的内容。。。谢谢vec.front应该是n,它是数字的一个实例?把它变成一个回复?@0x5453:Ubs,你说得对。所以我已经删除的第一条评论是:移动数字并没有移动向量中的内容。。。谢谢