C++ STL
文章平均质量分 67
zhu2695
Coding life....
展开
-
mem_fun & mem_fun_ref
mem_fun、mem_fun_ref 的作用: 将一个"成员函数指针"包装成一个仿函数(函数对象)。 问题:有一个用户信息类CUserInfo,包括一个类成员函数initdata(用于初始化用户数据),代码如下:class CUserInfo{public:void initdata(void){// ...}};假设有一个列表存放所有的用户数据:原创 2013-03-28 23:56:28 · 678 阅读 · 0 评论 -
STL中的排序算法详解
1. 所有STL sort算法函数的名字列表:函数名 功能描述sort 对给定区间所有元素进行排序stable_sort 对给定区间所有元素进行稳定排序partial_sort 对给定区间所有元素部分排序partial_sort_copy 对给定区间复制并排序nth_element 找出给定区间的某个位原创 2013-04-04 21:23:25 · 965 阅读 · 0 评论 -
transform
/*////////////////////////////////template OutputIterator transform ( InputIterator first1, // 源容器的起始地址 InputIterator last1, // 源容器的终止地址 OutputIterator result, // 目标容器的起始地址转载 2013-04-04 16:59:51 · 506 阅读 · 0 评论 -
search & find_end
search()、find_end() 分别在一个指定的元素序列里查找另一指定子序列的第一次和最后一次出现的位置。 1. search()/*template ForwardIterator1 search (ForwardIterator1 first1, ForwardIterator1 last1, Forw原创 2013-04-04 17:35:02 · 729 阅读 · 0 评论 -
binary_search
/**binary_search 实现二分查找,如果是随机存取迭代器,则是对数复杂度,否则为线性复杂度。* 要求目标区间已排序。*//** template bool binary_search (ForwardIterator first, ForwardIterator last, const T& val);原创 2013-04-21 13:54:41 · 990 阅读 · 0 评论 -
lower_bound()、upper_bound()
参考一:函数作用 iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 iterator upper_bound( const key_type &key ):返回一个迭代器,指向键值> key的第一个元素。 lower_bound()函数第一个版本: template转载 2013-04-21 14:07:00 · 1308 阅读 · 0 评论 -
count
/**count: 用于计算容器中的某个给定值的出现次数, 计算迭代器区间[first, last)上等于value值的元素个数n.*/#include #include #include #include #include using namespace std; int main(int argc, char* argv[]) {原创 2013-04-21 13:38:28 · 632 阅读 · 0 评论 -
equal_range
/*STL中的equal_range算法返回一个pair类型的值range,vector vec;...//vec initializepair::iterator,vector::iterator> range;range = equal_range(vec.begin(),vec.end(),value); 其中range.first是可以在不改变原来排序顺序的情况下的原创 2013-04-21 14:18:33 · 908 阅读 · 0 评论 -
STL查找算法
STL 查找算法Section I正确区分不同的查找算法count,find,binary_search,lower_bound,upper_bound,equal_range 本文是对Effective STL第45条的一个总结,阐述了各种查找算法的异同以及使用他们的时机。首先可供查找的算法大致有count,find,binary_search,lower_bound,upper转载 2013-04-21 12:41:24 · 812 阅读 · 0 评论 -
STL容器:deque
参考一:1. 概念vector支持 随机访问每个元素,所需要的时间为常量,其在末尾增加或删除元素所需时间与元素数目无关,但是,在中间或开头增加或删除元素所需时间随元素数目呈线性变化。和vector相比,deque 是一个双向开口的连续线性空间,它允许在常数时间内对头端进行元素的插入或删除操作。需要注意的是,虽然deque也支持常数时间的随机访问,但是,由于其数据内存特点,其效率较vec转载 2013-05-04 21:12:41 · 1055 阅读 · 0 评论 -
C++ STL 迭代器
参考一:迭代器迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。但是,迭代器不仅仅是指针,因此你不能认为他们一定具有地址值。例如,一个数组索引,也可以认为是一种迭代器。迭代器有各种不同的创建方法。程序可能把迭代器作为一个变量创建。一个STL容器类可能为了使用一个特定类型的数据而创建一个迭代器。作为指针,转载 2013-05-19 16:24:39 · 1114 阅读 · 0 评论 -
C++类或结构作为map的key值
1.只有重载string可以作为key值是因为string重载了2.如果不重载error C2676: 二进制“3.重载Expression: invalid operator比如bool operator #include #include using namespace std;// 重载<的类或结构才能作为map的key值cla转载 2013-06-06 23:11:11 · 2032 阅读 · 0 评论 -
map的下边访问和vector的下标访问的区别
map这种容器的下边访问和Vector等容器的下标访问有本质的区别对于Vector容器,用aVector[i]访问第i个元素时,如果元素不存在,容器不会增加元素, 而对于map,用aMap[key] 访问键key对应的对象时,如果该键对应的对象存在,则返回该对象(这和Vector一样),但是,当键值为key的元素不存在时,容器会自动的增加一个pair,键为key,而值则为一个容转载 2013-07-25 11:23:07 · 1399 阅读 · 0 评论 -
小心使用STL中map的[]操作符
一个map就是一个(关键码(key),值(value))对偶的序列,它提供基于关键码的快速提取操作。也就是说,可以用下标运算符[]将关键码作为下标去执行查找,并返回对应的值。因此可以把map的使用方法想象成有特殊下标的数组。在很多时候用下标运算符[]来对map中的元素进行存取是非常方便和简单的;但是,如果map下标运算符[]运用不得当,也会造成意想不到的问题。 我们知道,C++是不检查下转载 2013-07-25 11:30:30 · 845 阅读 · 0 评论 -
copy
/*template OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result);*/#include // std::cout#include // std::copy#include // std::vectori原创 2013-04-04 17:42:50 · 488 阅读 · 0 评论 -
find_first_of
/*find_first_of算法带有两对迭代器参数,来标记两段元素范围,在第一段范围中查找与第二段范围中任意元素匹配的元素,返回一个迭代器,指向第一个匹配的元素。如果找不到则返回第一个元素的end迭代器。*//*template ForwardIterator1 find_first_of (InputIterator first1, InputIterat原创 2013-04-04 17:14:19 · 618 阅读 · 0 评论 -
头文件 algorithm 中的常用函数
algorithm意为"演算法", 是C++的标准模版库(STL) 中最重要的头文件之一,提供了大量基于迭代器的非成员模版函数。库函数:accumulate 累加序列的所有元素adjacent_difference 计算序列中的相邻元素是否不同adjacent_find 查找相邻的两个相同(或者有其他关联)元素any_of 如果对于任意元素的谓词测试都为true,则返回true原创 2013-03-28 22:01:22 · 1463 阅读 · 0 评论 -
find_if
/* find_if函数包含三个参数,前两个指出查找范围,第三个参数是一个函数指针或者函数对象。 find_if的作用是:在容器范围内,返回一个使第三个参数所指函数为真的元素的迭代器。*//* find_if的STL定义: template InputIterator find_if(InputIterator first, InputIterator la原创 2013-03-28 22:47:25 · 1169 阅读 · 0 评论 -
count_if
/*count_if :返回区间中满足指定条件的元素数目。template typename iterator_traits::difference_type count_if( InputIterator _First, InputIterator _Last, Predicate _Pred );原创 2013-03-28 23:10:12 · 652 阅读 · 0 评论 -
sort
/*sort模板有两种:---------------------------------------------------------------------template void sort(RanIt fist, RanIt last);template void sort(RanIt fist, RanIt last, Pred pr);--原创 2013-03-28 23:36:47 · 555 阅读 · 0 评论 -
for_each 返回值
#include #include#include using namespace std;/* for_each()有一个独门秘诀,其他算法概莫有之:那就是它可以返回其仿函数(返回所传入的函数对象的最终状态). 这样我们就可以通过for_each()的返回值来获取仿函数的状态.*//* 仿函数 */class MeanValue{publi原创 2013-03-03 16:52:09 · 1460 阅读 · 0 评论 -
iterator (迭代器)
除了使用下标来访问vector对象的元素外,标准库还提供了另一种检测元素的方法:使用迭代器(iterator)。迭代器是一种允许程序员检查容器内元素,并实现元素遍历的数据类型。标准库为每一种标准容器(包括vector)定义了一种迭代器类型。迭代器类型提供了比下标操作更一般化的方法:所有的标准库容器都定义了相应的迭代器类型,而只有少数的容器支持下标操作。因为迭代器对所有的容器都适用,现代C+原创 2013-03-30 16:48:34 · 733 阅读 · 0 评论 -
ptr_fun
/* ptr_fun 是将一个普通的函数适配成一个仿函数(functor).* (Convert function pointer to function object)* 下面的例子使用 ptr_fun 将普通函数(两个参数, 如果有多个参数, 要改用boost::bind)适配成bind1st或bind2nd能够使用的functor,* 否则对bind1st或bind2nd直原创 2013-03-30 19:21:26 · 858 阅读 · 0 评论 -
predicates (from functional.h)
#include #include #include using namespace std;int main () { int numbers[]={20,40,50,10,30}; sort(numbers, numbers+5, greater() ); //Result: 50 40 30 20 10 //sort(numbers, numbers+5原创 2013-03-30 17:41:34 · 690 阅读 · 0 评论 -
vector
/*Sample: 删除vector里的所有重复元素*/#include #include #include using namespace std;int main(int argc, char* argv[]){ vector intV; intV.push_back(13); intV.push_back(12); intV.push_ba原创 2013-03-31 10:52:02 · 588 阅读 · 0 评论 -
not1 & not2
#include #include #include #include using namespace std;int main(){ vector coll; for(int i = 1; i <= 13; ++i) { coll.push_back(i); } //查找元素值 小于等于10 的元素的个数 //也就是使得 !(10 < e原创 2013-03-30 18:31:49 · 1788 阅读 · 0 评论 -
bind1st & bind2nd
#include #include #include #include using namespace std;int main(){ vector coll; for(int i = 1; i <= 13; ++i) { coll.push_back(i); } //查找元素值大于10的元素的个数 //也就是使得10 < elem成立原创 2013-03-30 18:05:58 · 623 阅读 · 0 评论 -
accumulate
C++ STL中有一个通用的数值类型计算函数— accumulate(),可以用来直接计算数组或者容器中C++内置数据类型,例如:#include numeric>int arr[]={10,20,30,40,50};vectorint> va(&arr[0],&arr[5]);int sum=accumulate(va.begin(),va.end(),0); //sum =原创 2013-04-04 16:16:37 · 878 阅读 · 0 评论 -
访问vector中的数据
使用两种方法来访问vector: 1、 vector::at(idx) --> 传回索引idx所指的数据,如果idx越界,抛出out_of_range 2、 vector::operator[] operator[]主要是为了与C语言进行兼容。它可以像C语言数组一样操作。但at()是我们的首选,因为at()进行了边界检查,如果访问超过了vector转载 2013-07-25 12:07:19 · 1611 阅读 · 0 评论