- 博客(16)
- 收藏
- 关注
原创 针对MSVC4-6的解决方案
//不同的迭代器之间相互复制,这在老版本上不能通过编译 istream_iterator<int> begin(cin), end; vector<string> vs(begin, end); //笔者本地能编译通过,如果不能编译通过,则可使用下边的方法 istream_iterator<int> begin2(cin), end2; vector<strin
2016-10-05 22:21:12 278
原创 地域性与忽略大小写的字符串比较
#include<iostream> #include<string> #include<vector> #include<algorithm>using namespace std;struct lt_noCase : public binary_function<char, char, bool>{ bool operator()(const char& a, const cha
2016-10-05 22:11:53 265
原创 文章标题
几个常用的stl站点:sgi stl站点:sgi stl站点stlPort站点STLport网站Boost网站,Boost网站(译注:如果访问不了,可以试试http://boost.sourceforge.net/)
2016-10-05 20:42:37 199
原创 effective stl 第49条:学会分析与STL相关的编译器诊断信息
string不是一个类,它是typedef。实际上,它是这个的typedef: basic_string < char, char_traits<char>, allocator<char> > ;因此,可以将所有的basic_string替换为string,举例如下: example.cpp(20): error C2664:’__thiscall std::basic_string//该
2016-10-05 20:21:57 233
原创 effective stl 第48条:总是包含(#include)正确的头文件
STL编程一件极其令人沮丧的事情是,在一个STL平台上顺利编译通过的,在另一个平台上可能需要额外的#include指令才能编译通过。● 几乎所有的容器都在同名的头文件里,比如,vector在中声明,list在中声明等。例外的是和。声明了set和multiset,声明了map和multimap。 ● 除了四个算法外,所有的算法都在中声明。例外的是accumulate(参见条款37)、inner_pr
2016-10-05 19:33:44 211
原创 effective stl 第47条:避免产生“直写型”的代码
#include<iostream> #include<vector> #include<iterator> #include<algorithm> #include<functional>using namespace std;//假设有一个vector<int>,现在想删除其中所有小于x的元素,但是 //在最后一个其值不小于y的元素之前所有的元素都要留下 //方法一: void Function
2016-10-05 19:28:24 304
原创 effective stl 第46条:考虑使用函数对象而不是函数作为STL算法的参数
void Function1() { vector<double> v; //将函数对象传给sort() sort(v.begin(), v.end(), greater<double>()); } void Function2() { vector<double> v; //将函数传给sort() sort(v.begin(), v.end(), d
2016-10-05 19:00:31 286
原创 effective stl 第45条:正确区分count/find/binary_search/lower_bound/upper_bound/equal_range
查找信息:binary_search/lower_bound/upper_bound/equal_range/count/count_if/find/find_if如果迭代器区间的数据是有序的:建议使用binary_search/lower_bound/upper_bound/equal_range(使用等价性搜索) 如果迭代器区间的数据是无序的:建议使用count/count_if/find/f
2016-10-05 18:10:21 642
原创 effective stl 第44条:容器的成员函数优先于同名的算法
有些容器提供了一些与算法同名的成员函数,比如:关联容器提供了count/find/lower_bound/upper_bound和equal_range,而list则提供了remove/remove_if/unique/sort/merge/reverse.在多数情况下,应该使用成员函数。原因是:1、成员函数速度快。2.成员函数与容器结合的更加紧密,这是算法不能比的,并且同名的算法和成员函数所做的事
2016-10-05 16:12:03 382
原创 effective stl 第43条:算法调用优先于手写的循环
使用算法优先于手写的循环,理由如下: ● 效率:算法通常比程序员产生的循环更高效。 ● 正确性:写循环时比调用算法更容易产生错误。 ● 可维护性:算法通常使代码比相应的显式循环更干净、更直观。#include<iostream> #include<algorithm> #include<list> #include<functional>using namespace std;class Wi
2016-10-05 15:57:24 253
原创 effective stl 第42条:确保less<T>和operator<具有相同的语义
#include<iostream> #include<algorithm> #include<functional> #include<set>using namespace std;class Widget { public: size_t weight() const { } size_t maxSpeed() const { } bool
2016-10-05 13:36:30 418
原创 effective stl 第41条:理解ptr_fun/mem_fun/mem_fun_ref的由来
这三个函数的主要作用是掩盖C++语言中一个内在的语法不一致的问题。#include<iostream> #include<vector> #include<list> #include<algorithm>using namespace std;class Widgets { public: Widgets(){}; void test(){}; private:};//假设是一个可
2016-10-05 11:42:47 302
原创 effective stl 第40条:若一个类是函数子,则应使他可配接
#include<iostream> #include<list> #include<algorithm> #include<functional>using namespace std;bool isInsteresting(const string* obj)//判断某个类型是否有趣 { if ((*obj)[4] % 7 == 0) { return true;
2016-10-05 10:39:54 350
原创 effective stl 第39条:确保判别式是“纯函数”
在C++中,纯函数所能访问的数据应该仅限于参数和常量(在函数的周期中不会被改变,自然的,这样的常量应该被声明为const).如果一个纯函数需要访问那些可能在两次调用之间发生变化的数据,那么用相同的参数在不同的时刻调用该函数就有可能得到不同的结果。判别式类:是一个函数的子类,他的operator()函数是一个判别式,也就是说,他的operator()返回true或者false.正如你所料,STL中凡事
2016-10-04 15:18:11 310
原创 effective stl 第38条:遵循按值传递的原则来设计函数子类
无论是C还是C++,都不允许将一个函数传递给另一个函数,相反,你必须使用函数指针,qsort函数就是这样的一个函数。void qsort(void* base, size_t nmemb, size_t size, int(*cmpfcn)(const void* a, const void *b));qsort是按值传递的,C++和C标准都遵循这个原则:函数指针是按值传递的。for_each是安置
2016-10-04 11:03:56 398
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人