加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 为什么移动矢量和移动元素对矢量大小有不同的影响?

发布时间:2020-12-16 09:21:00 所属栏目:百科 来源:网络整理
导读:我知道size()和empty()不需要前提条件,因此可以在移动的对象上调用并返回正确的结果.但我不明白结果背后的理论. std::vectorstd::string v = {"a","b"};std::string x = std::move(v[0]);std::cout x std::endl; // astd::cout v.size() std::endl; // 2std:
我知道size()和empty()不需要前提条件,因此可以在移动的对象上调用并返回正确的结果.但我不明白结果背后的理论.

std::vector<std::string> v = {"a","b"};
std::string x = std::move(v[0]);
std::cout << x << std::endl;          // a
std::cout << v.size() << std::endl;   // 2
std::cout << v.empty() << std::endl;  // 0,false
auto y = std::move(v);                
std::cout << v.size() << std::endl;   // 0
std::cout << v.empty();               // 1,true

结果显示,如果移动元素,向量的大小将不会改变.但是如果你移动整个矢量,它就会变空.这是有道理的,但我觉得需要更多的解释,以便我将来可以处理类似的案件.

解决方法

std::string x = std::move(v[0]);

您没有将元素移出集合(在本例中为向量).您正在将一个对象 – 一个std :: string实例 – 保存在v [0]中另一个对象x.集合本身没有改变.

auto y = std::move(v);

这会将std :: vector对象v移动到y对象中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读