您的位置:首页 > 编程语言 > C语言/C++

《我的第一本c++书》学习笔记:STL常用头文件和名字空间

2013-08-01 15:07 316 查看
头文件                                    名字空间                                                 描述

<deque>                                std                                                 双端队列容器,它是一个由连续存储的指向不同元素的指针所组成的数组

<queue>                                std                                                 队列容器,按照先进先出的规则排列容器中的数据

<stack>                                  std                                                堆栈容器,按照后进先出的规则排列容器中的数据

<vector>                                 std                                                 动态数组容器,连续存储的容器中的元素,它是最常用的非关联容器

<map>                                                                                           映射容器,由{键,值}对组成的集合,以某种作用于键值对上的谓词排列,

<multimap>                          std                                                  其中,map容器中的键值对是一一对应的关系,而multimap容器中一个键可以

<unordered_map>                                                                     对应多个值。作为映射容器,map和multimap由来已久,其底层由红黑树实现,而unordered_map

<unordered_multimap>                                                            和unordered_multimap是最新的c++ox标准新添加入STL的映射容器,底层由哈希表实现。

<set>                                                                                               集合容器,由节点组成的红黑树,每个节点都包含一个元素,节点之间以某种作用于元素对的谓词排列

<multiset>                              std                                                  没有两个不同的元素能够拥有相同的次序,其中,unordered_set和unordered_multiset

<unordered_set>                                                                         是最新的c++ox标准新添加入STL的映射容器,

<unordered_multiset>                                                                其底层由哈希表实现

<algorithm>                            std                                     它是所有STL头文件中最大的一个,它是由许多模板函数组成,它们相互独立构成STL中的通用法,

                                                                                                          包括:比较、交换、查找、排列等。

<functional>                             std                                     定义了一些模板类,用以声明函数对象

<string>                                    std                                      字符串类

<regex>                                    std                                       正则表达式,用于对字符串进行处理

<memory>                               std                                      其中定义了跟内存操作相关的组件,例如智能指针等

例子代码如下:

// k.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
//引入STL相关组件的头文件
#include <vector>
#include <algorithm>                 //cout_if
#include <functional>               //bind2and

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{

vector<int> vecSalary;

cout<<"请输入工资数据,0表示输入结束"<<endl;

int nSalary = 0;
do
{
cin>>nSalary;
if (0 == nSalary)
{
break;
}
vecSalary.push_back(nSalary);
} while (true);

int nTotal = count_if(vecSalary.begin(),vecSalary.end(),bind2nd( greater<int>(), 1000));

cout<<"工资超过1000的人数为:"<<nTotal<<endl;

return 0;
}


解释下bind2nd:

bind1st(const Operation& op, const T& x)就是这么一个操作:x op value

bind2nd(const Operation& op, const T& x)就是这么一个操作:value op x,其中value是被应用bind的对象。

这里要注意下:

bind1st和bind2nd可以绑定二元函数对象的某一个值。值得注意的是:bind1st和bind2nd不是函数对象,它们是普通的函数,它们的输入参数中,第一个参数是二元函数对象,第二个参数是要绑定的值(对于bind1st是绑定二元函数参数的第一个参数,对于bind2nd是绑定二元函数参数的第二个参数。

如果bind2nd(mem_fun_ref(&Student::isnamed), strFindName),而isnamed中有一个参数,则综合起来是2个参数,所以用到bind2nd;

如果bind1st(mem_fun_ref(&Student::isnamed), strFindName),而isnamed没有参数,则综合起来为1个参数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: