STL中的next_permutation函数生成全排列

STL中的next_permutation函数生成全排列
在C++ Reference中查看了一下next_permutation的函数声明: #include <algorithm> bool next_permutation( iterator start, iterator end ); The next_permutation() function attempts to transform the given range of elements [start,end) into the next lexicographically greater permutation of elements. If it succeeds, it returns true, otherwise, it returns false. 从说明中可以看到 n...

STL之set的使用汇总

STL之set的使用汇总
set是STL中一种标准关联容器(vector,list,string,deque都是序列容器,而set,multiset,map,multimap是标准关联容器),它底层使用平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高。set,顾名思义是“集合”的意思,在set中元素都是唯一的,而且默认情况下会对元素自动进行升序排列,支持集合的交(set_intersection),差 (set_difference) ...

STL(标准模版库)学习资源汇总

STL(标准模版库)学习资源汇总
1 STL网站类 SGI STL ★★★★★ SGI STL是目前应用最为广泛的STL版本了。此网站提供SGI STL源码下载,还提供相应的STL编程帮助文档,以及部分设计文档。不过对于STL刚开始学习的朋友来说,可以放在第二步学习。 STLport ★★★★★ STLport STL完全可以与SGI STL媲美。此网站提供STLport STL源码下载,在线帮助,同时也提供一些STL资源列表,都是英文的,不过看看无妨。在C++ Builder中使用的就是STLport Center of ...

string 函数列表

string 函数列表
函数名 描述 begin 得到指向字符串开头的Iterator end 得到指向字符串结尾的Iterator rbegin 得到指向反向字符串开头的Iterator rend 得到指向反向字符串结尾的Iterator size 得到字符串的大小 length 和size函数功能相同 max_size 字符串可能的最大大小 capacity 在不重新分配内存的情况下,字符串可能的大小 empty 判断是否为空 operator[] 取第几个元素,相当于数组 c_str 取...

map中怎样使用自定义的类

map中怎样使用自定义的类
文章来源:STL入门教程.chm [cpp] //程序:映射自定义的类 //目的:说明在map中怎样使用自定义的类 #include <string> #include <iostream> #include <vector> #include <map> using namespace std; class CStudent { public: int nStudentID; int nAge; public: CStudent(){} //缺省构造函数 CStudent(int nSID,int nA) //普通构造函数 { nStudentID=nSID; nAge=nA; } CStudent(con...

STL之vector的使用四(vector的查找、空、及其它技巧)

STL之vector的使用四(vector的查找、空、及其它技巧)
判断vector是否为空 在判断容器是否为空的时候,使用empty()来代替size()是否为了0的检查方式,因为empty更加高效时间复杂度是常数时间的,size()时间复杂度不是常数时间的。 原则:使用empty判断标准容器是否为空 vector中的查找 原则:尽量使用标准容器自带的算法代替公共算法。 但是vector中并没有多少自己的算法,倒是list中有remove ,remove_if,sort,reverse等算法。 find find_if 使用交换技巧来修正...

STL之vector的使用三(vector的删除)

STL之vector的使用三(vector的删除)
删除指定元素 [cpp] vector<double> v1; //….初始化代码 vector<double>:: iterator i = find( v1.begin(),v1.end(), 3.0 ); if( i != v1.end() ) { v1.erase(i); } [/cpp] 这样就真的删除了么指定的元素了么?没有。其实只是内部的元素作了移动,vector的删除的时间复杂度是很高的。所以选择容器的时候,如果需要频繁在中间插入和删除元素,那选择vector就会影响效率了。 注意:插入或者删除...

STL之vector的使用二(vector的遍历)

STL之vector的使用二(vector的遍历)
遍历vector 例如有vector<int> v1; [cpp] void print( int i) { cout << i << endl; } [/cpp] 方式1: [cpp] for( int i=0; i<v1.size(); i++ ) { print(v1[i]); } [/cpp] 这种方式是我们最熟悉的,但是不够好,写起来不够简洁。而且对于没有随机迭代器的其他容器来说,这样做是办不到的。 方式2: [cpp] typedef vector<int>:: iterator VIntIterator; VIntIterator end = v1....

STL之vector的使用一(初始化vector)

STL之vector的使用一(初始化vector)
简介:vector可用于代替C中的数组,或者MFC中的CArray,从许多说明文档或者网上评论,一般一致认为应该多用vector,因为它的效率更高,而且具备很好的异常安全性。而且vector是STL推荐使用的默认容器,除非你知道你有特殊需要,使用vector不能满足你的需求,例如需要容器在head和tail高效的插入和删除,或者在任何位置高效的删除和插入操作,那么你可能使用deque或者list更加合适。 vector是连续内存容器,...

STL中栈的使用

STL中栈的使用
基本操作: push(x) 将x加入栈中,即入栈操作 pop() 出栈操作(删除栈顶),只是出栈,没有返回值 top() 返回第一个元素(栈顶元素) size() 返回栈中的元素个数 empty() 当栈为空时,返回 true 使用方法: 和队列差不多,其中头文件为: #include <stack> 定义方法为: stack<int>s1;//入栈元素为 int 型 stack<string>s2;// 入队元素为string型 stack<node>s3;//入队元素为自定义型...