C++
shouqi321
做一个合格的知识的搬运工。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
给C++新手的一些开发建议(一)
这种情况下其实是不推荐用std::endl的,因为std::endl会实时的去刷buffer,在循环体内使用会有性能上的开销。这样写代码思路会很清晰,你不需要关心数据是怎么获取,你只需要把整个容器扔进去,以及给怎么处理数据定个标准。第二条:在循环中使用 std::endl。第五条:在std数组上使用C数组。第三条:对于for循环的使用。第四条:重写标准算法。原创 2023-05-24 18:21:46 · 196 阅读 · 0 评论 -
聊聊C++的RAII
上面的代码很简单,就是一个Animal父类,其他三个类继承了Animal。RAII其实就是依托栈数据的特性,在生命周期结束后,回去调用类的析构函数,然后你在析构函数中去维护内存的释放。RAII,英文全称是 Resource Acquisition Is Initialization,直译为资源获取即初始化,是 C++ 所特有的资源管理方式。这里的animal是放在栈中的,当animal 消亡的时候,会调用AnimalWrapper类中的析构函数,从而释放了之前创建的对象。原创 2023-05-12 16:01:47 · 116 阅读 · 0 评论 -
C++的三大容器之无序容器
无序容器的类型就是在有序容器基础上加个unordered前缀,分别是:unordered_set/unordered_multiset、unordered_map/unordered_multimap,平时项目中,不知道大家碰到调用无序容器的概率是多少?我印象中,好像很难碰到这种场景。无序容器的用法也和有序容器一样,不同点在于无序容器的内部数据结构是散列表。原创 2023-05-04 20:34:28 · 216 阅读 · 0 评论 -
C++的三大容器之有序容器
最后我想提醒一下:对于有序容器,在每次插入数据的时候都会自动进行排序,所以当数据量很大的时候插入位置的查找,树的旋转都会影响性能。所以如果你对数据没有实时排序的要求,建议你使用vector,在最后做一次数据的排序。如果你对数据需要实时的排序,那只能用有序容器了。有序容器的元素在插入容器后会被按照某种规则自动排序,而C++的有序容器的实现通常是树结构(红黑树)。对于所有的有序容器来说,C++的基本类型都可以很完美的插入到容器中,但是对于自己定义的类型,你需要事先重载“<”操作符。容器的默认比较是小于。原创 2023-05-04 19:03:56 · 1071 阅读 · 0 评论 -
C++的三大容器之顺序容器
这是因为当 vector 的容量不够的时候,它会去寻找一块两倍大小的新内存,然后把旧元素拷贝或者移动过去,最后把新数据插入进去。我记得当时的业务中需要在vector容器中进行大量的数据插入,等数据达到一定量级的时候,接口返回时间越来越长。最后找到是这个原因导致,通过reserve接口进行所需容器的空间预估,可以减少动态扩容的调用拷贝构造的次数,从而提高程序性能。虽然vector、deque、list和forward_list都可以进行动态的扩容,但是它们的机制是完全不同的。原创 2023-05-02 21:31:48 · 216 阅读 · 0 评论 -
C++的三大容器之认识容器
从上述结果看,建议自己定义的类,如果后期会有容器相关的操作,需要实现移动构造,当调用push_back插入数据的时候能提高性能。关于容器中的元素,不太建议存放指针,因为指针是间接持有数据,当容器生命周期结束后,其中存放的指针很容易被遗忘,导致内存泄漏。通常容器保存的元素是值语义,说白了就是容器存储的是元素的拷贝而非引用。所以当元素很大或者数量很多的时候,操作拷贝的开销会很大,性能会大打折扣。通俗讲容器其实就是C++对数据结构的抽象和封装,开发人员可以对所有的数据进行相同的操作。原创 2023-05-02 19:53:58 · 212 阅读 · 0 评论
分享