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,你说得对。所以我已经删除的第一条评论是:移动数字并没有移动向量中的内容。。。谢谢