Effective STL:2、vector 和 string

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_30534935/article/details/102733371

所有的 STL 容器都是有用的,但对于大多数 C++ 程序员,你会发现使用 vector 和 string 的时候回更多一些。这是可以想见的。设计 vector 和 string 的目的就是为了代替在大多数应用中使用的数组,而数组的用途是如此广泛,以至于它被包含在从 COBOL 到 Java 的所有成功的商业编程语言中。


本章的条款涵盖了 vector 和 string 的多个方面。首先会讨论为什么值得从数组转到 vector 和 string,然后探究提高 vector 和 string 效率的途径,指出不同 string 实现的重要区别,研究如何把 vector 和 string 的数据传递给只能理解 C 的 API,并学会怎样避免不必要的内存分配。最后,我们将研究一个有指导性的特例,vector < bool>,一个功能不完全的 vector。


本章中的条款将帮助你理解这两个最常用的容器,并改进对它们的使用。在学完本章之后,你将会知道如何更好地使用它们。



第13条:vector 和 string 优先于动态分配的数组


如果你正在动态地分配数组,那么你可能要做更多的工作。为了减轻自己的负担,请使用 vector 或 string。



第14条:使用 reserve 来避免不必要的重新分配


首先,若能确切知道或大致预计容器中最终会有多少元素,此时可以使用 reseve。

其次,先预留足够大的空间,然后,当把所有数据都假如以后,再去除多余的容量。



第15条:注意 string 实现的多样性


string 的值可能会被引用计数,也可能不会。

string 对象大小的范围可以是 char* 指针大小的 1 倍到 7 倍。

创建一个新的字符串值可能需要零次、一次或两次动态分配内存。

string 对象可能共享,也可能不共享其大小和容量信息。

string 对象可能支持,也可能不支持针对单个对象的分配子。

不同的实现堆字符内存的最小分配单位有不同的策略。



第16条:了解如何把 vector 和 string 数据传给旧的 API


先让 C API 把数据写入到一个 vector 中,然后把数据复制到期望最终写入的 STL 容器中。



第17条:使用 “swap 技巧” 除去多余的容量


在做 swap 的时候,不仅两个容器的内容被交换,同时它们的迭代器、指针和引用也将被交换(string除外)。



第18条:避免使用 vector < bool>


首先,它不是一个 STL 容器。

其次,它并不存储 bool。

猜你喜欢

转载自blog.csdn.net/qq_30534935/article/details/102733371