C ++ 11如何改变标准容器?

时间:2012-11-19 06:35:11

标签: c++ data-structures c++11

我知道C ++ 11已经引入了新的移动语义,因此数据容器被更改以满足语言的新定义和规范,我并不真正了解标准容器如何从中受益。

另外我认为我已经得到了Rvalue是什么以及移动语义是如何起作用的,问题是我没有看到任何关于此的有用点,移动事物和更改其标签听起来并不像一个有意义的功能。

我可以要求一个关于{C} 11中map, list, vector, ...如何变化的好资源?

2 个答案:

答案 0 :(得分:3)

您可以在cppreference查看容器的说明,它解释了STL的界面。在那里,您可以找到C ++ 11标准添加的内容 - 它标有“(since C++11)”标记。如果单击容器类型,它将显示哪些方法是新的。

答案 1 :(得分:3)

引入RValues和LValues的原因是移动对象数据比在其上执行复制要快得多。性能提升主要是因为内部存储的指针在移动过程中不需要复制,否则会涉及不必要的malloc调用和memcpys。例如,std::string包含指向可能非常大的char数组的指针。复制它将涉及复制char数组中的数据,移动只需将指针复制到该数据。

关于LValues和RValues,我所知道的唯一已经改变的东西,现在我们有一个闪亮的新构造函数可以使用,并且许多成员函数已经被重写以利用移动语义。

例如,std::vector现在有一个std::vector::vector(std::vector&& move) ctor,像push_back这样的函数已被更改为也接受RValues。

在大多数情况下,这对你来说应该是无用的。如果你正在编写一个库,而不是只使用一个库,你需要知道这个,以及URefs。