美文网首页
Effective STL 第13条

Effective STL 第13条

作者: 懒生活 | 来源:发表于2022-09-14 22:43 被阅读0次

vector string 是用来取代数组的, 绝大部分时候,当你想new数组的时候,都要考虑用vector 或者string来替代.
只有一种情况要慎重考虑是否使用string. 当string实现是带引用计数的,并且你是在多线程中使用string. 这时候如果引用计数在多线程下面的性能已经不满足程序的要求,这时候要考虑用vector<char> 来替换这种string. 当然如果string本身并不带引用计数,那就没有什么问题了.
这里需要更正并强调一下,c++11以后string的实现是不带引用计数。也没有COW计数。COW即copy to write。
要确认string是否带引用计数,或者是否带COW技术。用下面的代码简单试一下就知道了

int main()
{
    string s1 = "hellol";
string s2 = s1;
printf("s1 address %x\n", s1.c_str());
printf("s2 address %x\n",s2.c_str()));
s1[1] = 'q';
s2[1] = 'w';
printf("s1 address %x\n", s1.c_str());
printf("s2 address %x\n",s2.c_str()));
return 0;

如果带引用计数,那么在s2=s1代码之后,他们的地址应该是一样的,只不过s1的字符串资源引用次数+1。 当某个引用要修改数据的时候,这时候就不能共享了,编译器会遵循COW规则,先完整拷贝一份出来,原来的资源使用计数减一。然后在拷贝出来的资源上去修改。此时再打印s1和s2的资源地址,他们已经不一样了。这种实现存在一些隐藏的问题。c++11以后已经不这样实现了。

相关文章

  • EFFECTIVE+STL中文版:50条有效使用STL的经验

    《Effective STL中文版:50条有效使用STL的经验》是EffectiveC++的第3卷,被评为“值得所...

  • 常用的 STL 查找算法

    常用的 STL 查找算法 《effective STL》中有句忠告,尽量用算法替代手写循环;查找少不了循环遍历,在...

  • Effective STL 第7条

    容器中的对象如果是指针,指针指向的资源,容器没有办法自动释放. 问题引出 容器在自己析构的时候,会把包含的对象逐个...

  • Effective STL 第28条

    正确使用reverse_iterator对于任何一个容器, 使用iterator, 你只可能正向正序访问容器内部的...

  • Effective STL 第22条

    主要不要修改set mutipleSet的key

  • Effective STL 第30条

    如果是区间操作,注意确保容器具有足够的区间 这个很矛盾, 我们害怕使用数组,就是因为数组有可能越界.为了不去考虑数...

  • Effective STL 第31条

    准确的选择排序算法 如果要对一个数列进行完全的排序,那么用sort是个不错的选择.但是如果只是部分排序, 要考虑更...

  • Effective STL 第34条

    为什么有些算法需要排序的区间 binary_search算法是二分查找, 这种查找需要查找空间的序列是有序的. 为...

  • Effective STL 第19条

    理解相等于等价相等的基础是 == , 如果x==y成立,就说明x和y的值相等对于有顺序关系的容器, 为了顺序的存在...

  • Effective STL 第25条

    散列表: 用key可以作为索引快速找到对应的value. 且这些对象在容器里面不排序. 散列表和标准关联容器set...

网友评论

      本文标题:Effective STL 第13条

      本文链接:https://www.haomeiwen.com/subject/jtkcortx.html