移动矢量与移动元素如何导致矢量大小差异显著?

2026-04-16 19:262阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计349个文字,预计阅读时间需要2分钟。

移动矢量与移动元素如何导致矢量大小差异显著?

我知道 `size()` 和 `empty()` 不需要前置条件,因为它们可以直接在移动的对象上调用并返回正确的结果。不过,我不太清楚结果背后的具体理论。

cppstd::vector v={a, b};std::string x=std::move(v[0]);std::cout < 我知道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对象中.

本文共计349个文字,预计阅读时间需要2分钟。

移动矢量与移动元素如何导致矢量大小差异显著?

我知道 `size()` 和 `empty()` 不需要前置条件,因为它们可以直接在移动的对象上调用并返回正确的结果。不过,我不太清楚结果背后的具体理论。

cppstd::vector v={a, b};std::string x=std::move(v[0]);std::cout < 我知道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对象中.