首页 > 编程知识 正文

实现vector容器(vector函数)

时间:2023-05-06 05:01:46 阅读:100210 作者:800

第一部分

00-1010如果你使用new,这意味着你必须确保以后删除它。

如果你使用的字符串是通过引用计数实现的,而你运行在多线程环境中,你认为字符串引用计数的实现会影响效率,那么你至少有三个可行的选择,没有一个是放弃STL。首先,检查您的库实现,看看是否可以禁用引用计数,通常是通过更改预处理变量的值。其次,找到或开发一个不使用引用计数的字符串实现。第三,考虑用vectorchar代替string。vector的实现不允许引用计数,所以不会有隐藏的多线程性能问题。

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

通常有两种方法来使用预留,以避免不必要的重新分配。第一种方法是使用reserve,如果你能准确或大致知道容器中最终会有多少元素的话。第二种方法是先保留足够的空间,然后在添加完所有数据后,移除多余的容量。

00-1010如果你想有效地使用STL,那么你需要知道string实现的多样性,尤其是当热情的发带编写的代码必须运行在不同的STL平台上,并且你面临着严格的性能要求时。

00-1010如果你有一个向量V,你需要得到一个只想要V中数据的指针,这样数据就可以对齐成数组,那么你只需要用& ampv [0]或& amp* v.begin(),但很难理解。对于字符串s,对应的形式是s.c_str()。

如果你想用C API的数据初始化一个向量,那么可以利用向量和数组之间内存布局的兼容性,先把数据写入向量,然后把数据复制到你期望最终写入的STL容器中。

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

vectorContestant(参赛者)。互换(参赛选手);

vectorContestant(参赛者)表达式创建一个临时矢量,它是参赛者的副本:这是由矢量的副本构造器完成的。但是,向量的复制构造函数只为复制的元素分配所需的内存,因此这个临时向量没有额外的容量。然后我们交换临时向量中的数据和偶发事件中的数据。之后,或有事项去掉后就有了容量,即原来临时变量的容量,临时变量的容量就变成了原来或有事项的臃肿容量。在这一点上,临时向量被析构,从而释放之前被偶然事件占用的内存。

同样的技术也适用于字符串:

字符串s;

.

字符串。互换;

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。