C++ 标准库(STL)中头文件:#include <memory>C++ 98std::auto_ptr<std::string> ps (new std::string(str));C++ 11shared_ptr unique_ptr weak_ptr auto_ptr(被 C++11 弃用)Class shared_ptr 实现共享式拥有(shared ownership)概念。多个智能指针指向相同对象,该对象和其相关资源会在 “最后一个 reference...
插入和删除时间:对于std::map,插入和删除操作的时间复杂度为O(log n),其中n是元素的数量。对于std::unordered_map,在平均情况下,插入和删除操作的时间复杂度为O(1),但在最坏情况下(例如发生大量哈希冲突时),时间复杂度可能会退化为O(n)。 排序:如果你需要按照键的顺序遍历元素,那么应该使用std::map。如果你...
C++ 标准库(STL)中头文件:#include <memory>C++ 98std::auto_ptr<std::string> ps (new std::string(str));C++ 11shared_ptr unique_ptr weak_ptr auto_ptr(被 C++11 弃用)Class shared_ptr 实现共享式拥有(shared ownership)概念。多个智能指针指向相同对象,该对象和其相关资源会在 “最后一个 reference...
C++ 98 最为重大的改进就是加入了 “标准模板库”(Standard Template Library, STL),使得“泛型程序设计”成为 C++ 除“面向对象”外的另一主要特点。 2003 年,ISO 的 C++ 标准委员会又对 C++ 略做了一些修订,发布了 C++ 03 标准。C++ 03 和 C++ 98 的区别对大多数程序员来说可以不必关心。(小幅修改) ...
代码膨胀。内联是以代码膨胀(复制)为代价,消除函数调用带来的开销。如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率的收获会很少。另一方面,每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间。 inline 函数无法随着函数库升级而升级。inline函数的改变需要重新编译,不像 no...
map底层是采用红黑树实现的,插入删除查询时间复杂度都是O(log(n)),它的内部是有序的,因此需要实现比较操作符(<)。 (19) STL中vector的实现 STL中的vector是封装了动态数组的顺序容器。不过与动态数组不同的是,vector可以根据需要自动扩大容器的大小。具体策略是每次容量不够用时重新申请一块大小为原来容量两倍的...
在c++中,申请动态内存是使用new和delete,这两个关键字实际上是运算符,并不是函数。 而在c中,申请动态内存则是使用malloc和free,这两个函数是c的标准库函数,使用它们必须包含stdlib.h,才能编译通过。 new/delete和malloc/free的相同之处在于,new和malloc都是手动申请动态内存,释放时new则需要delete释放内存,而malloc...
1)静态链接:在链接的时候就已经把要调用的库链接到生成的可执行文件中,只要编译成可执行文件,即使删除静态库也不会影响程序的执行。静态库在 Windows 下的后缀是 .lib,在 Linux 下的后缀是 .a。【优点】安全,【缺点】消耗内存空间大 2)动态链接:动态链接是在执行的时候,需要到了某个库,才去链接这个库。动态...
算法不依赖与容器(使用迭代器),但大多数依赖于元素类型。如find需要==运算符,其他算法可能要求支持<运算符。 算法永远不会执行容器的操作,永远不会改变底层容器的大小(添加或删除元素)。 accumulate(v.cbegin(), v.cend(), string(“”)) 算法累加运算符,第3个参数的类型决定了使用哪个+号运算符。
要遍历容器中的元素,你可以使用两种风格迭代器:Java 风格迭代器和STL 风格迭代器。Java 风格迭代器有更好的易用性和更高级的函数,而 STL 风格迭代器则在效率上会略有优势,并且可以用于 Qt 和 STL 提供的泛型算法中。 Qt 还提供了foreach关键字,可以方便地遍历容器。