Cygnus 是Windows下的g++编译器,安装后可以直接在根目录include文件夹下看到STL的源码,并且可以直接在源码中加上自己的一些能够帮助理解的代码,很方便。
一、Cygnus for windows安装
下载的可执行文件full.exe直接点开安装,安装后找到bin目录——如D:\Program Files\cygnus\cygwin-b20\H-i586-cygwin32\bin,添加到Windows环境变量path中。
二、Windows下c++代码编译运行
用文本编辑器编写c++代码:
#include "iostream" using namespace std; int main() { cout << "Hello World" << endl; }
打开window命令行cmd,进入代码路径,执行g++编译:
STL源码的路径在:D:\Program Files\cygnus\cygwin-b20\include\g++目录下,通过修改部分内部代码可以大致了解STL容器的工作流程,例如打开g++目录下的stl_vector.h文件,修改vector容器的size函数:
原定义:
size_type size() const { return size_type(end() - begin()); }
手动修改为:
size_type size() const { cout << "size of vector is :" << size_type(end() - begin()) << endl; return size_type(end() - begin()); }
编写代码:
#include "iostream" #include <vector> using namespace std; int main() { vector<int> vec; vec.push_back(1); cout << vec.size() << endl; }
编译运行:
从图中可以看出,整个过程vector的size函数应该是被调用了两次,其中一次是push_back生效之前,一次是在之后,具体细节可以参考源代码。
参考:
《STL源码剖析》