当我使用g编译一个使用STL的程序时,库是如何链接到我的程序的?动态还是静态?
对我来说,静态听起来很奇怪,因为这意味着每一个使用STL的C程序都必须在内部包含它。另一方面,动态链接对我来说也很奇怪,因为对于所有OOP的东西,我不知道如何动态链接库并支持不同类型的对象。。。
那么这里到底发生了什么?
部分动态,部分静态:
下面是一个简单的例子:
#include <vector>
int main()
{
std::vector<int> v;
}
编译像
g++ xxx.cpp -g -Wall -Wextra
生成一个链接下一个库的文件:
$ ldd a.out
linux-vdso.so.1 => (0x00007fffa7767000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f353bee7000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f353bcd1000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f353b908000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f353b604000)
/lib64/ld-linux-x86-64.so.2 (0x00007f353c20c000)
它有矢量符号:
$ nm a.out | grep vector
000000000040073e W _ZNSt6vectorIiSaIiEEC1Ev
000000000040073e W _ZNSt6vectorIiSaIiEEC2Ev
0000000000400758 W _ZNSt6vectorIiSaIiEED1Ev
0000000000400758 W _ZNSt6vectorIiSaIiEED2Ev
模板总是根据需要实例化,它们的实例根据它们使用的对象进行定制,是生成的二进制文件的一部分。
其他不基于模板的STL可以静态或动态链接,具体取决于编译器设置。
答案就在你的问题中:STL
代表“标准模板库”。由于模板位于头文件中,并且仅在需要(例如使用)时才会实例化,因此可以包含每个STL头(如果需要),如果不使用任何一个,则二进制文件不会变大。
STL不是一个简单的工具。lib或。必须链接的文件。它是头文件的集合。
使用STL编程 总结由容器、迭代器、算法和函数对象组成的STL是个惯例,但使用STL编程远不止那些。运用STL编程要知道什么时候使用循环,什么时候使用算法,什么时候使用容器成员函数。要知道equal_range什么时候是比lower_bound更好的搜索方式,要知道lower_bound什么时候比find更优越,要知道find什么时候击败equal_range。要知道怎么通过用仿函数替代做同一件事
希望您已经理解了我们之前讨论过的C ++模板的概念。 C ++ STL(标准模板库)是一组功能强大的C ++模板类,它通过模板提供通用类和函数,这些模板实现了许多常用的常用算法和数据结构,如向量,列表,队列和堆栈。 C ++标准模板库的核心是遵循三个结构良好的组件 - Sr.No 组件和说明 1 Containers 容器用于管理某种对象的集合。 有几种不同类型的容器,如deque,list,ve
在前面的章节中,我们已经学习了 C++ 模板的概念。C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。 C++ 标准模板库的核心包括以下三个组件: 组件 描述 容器(Containers) 容器是用来管理某一类对象的集合。C++ 提供了各种不同类型的容器,比如 deque、list
本文向大家介绍C++(STL库)之顺序容器vector的使用,包括了C++(STL库)之顺序容器vector的使用的使用技巧和注意事项,需要的朋友参考一下 一、特点 ①总的来说:可变大小数组。支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢 ②元素保存在连续的内存空间中,因此通过下标取值非常快 ③在容器中间位置添加或删除元素非常耗时 ④一旦内从重分配,和原vector相关的指针,引用,迭代
本文向大家介绍C++ STL库应用汇总,包括了C++ STL库应用汇总的使用技巧和注意事项,需要的朋友参考一下 1、std::max_element的使用 std::min_element类似,求最小 升级可以用到任务队列管理中,通过任务优先级,选择优先级最高的任务 知识点扩展: C++ 的标准模板库(Standard Template Library,STL)是泛型程序设计最成功应用的实例。ST
本文向大家介绍C ++程序在STL中实现Prev_Permutataion,包括了C ++程序在STL中实现Prev_Permutataion的使用技巧和注意事项,需要的朋友参考一下 STL中的Prev_permutation用于将范围[first,last]中的元素重新排列到先前的字典上较小的排列。排列是N的每一个!元素可以采取的可能安排。这是一个在STL中实现Prev_permutation的