第16章:string类和标准模板库
2018-01-29 本文已影响0人
YBHello
/* 使用结构来记录知识 - 知识体系 */
本章节复习了 string 类,但其重点为标准模板库的介绍。这里将采用:3+2+1 的方式来记录本章节知识点(为什么使用数字:1. 使用数字的方式更直观 2. 重新整理顺序、便于逻辑记忆):
1. 三个简单知识点
- a. string 类:初始化,用于输入、输出,其他一些方法(.size、.find等)
- b. 智能指针:unique_ptr、shared_ptr、auto_ptr(弃用)
- c. 函数对象:重载了 () 符号的对象,可被直接调用;bind1st、bind2nd;+ -> plus、* -> multiplies 等运算符到函数符的转换。
2. 两个标准模板库知识
- a. 容器、迭代器、算法原理:
- 容器:实现了对应结构体描述的方法的模板类。
- 迭代器:实现了 ++、*(解引用)、.begin、.end 等方法的模板类。
- 算法:实现了数学算法描述的功能的模板。
- b. 容器、迭代器、算法范例:verctor、deque、list、stack;xx.begin、xx.end;copy、transform 等
3. 一个其他
- a. valarray、array、initializer_list
简单使用范例代码:
/**
* 16. string 和 标准模板库
* 1. string
* 2. 容器 set 的使用
* 3. 算法 set_union
* 4. 迭代器 基本循环和 insert_iterator
*/
#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
#include <iterator>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
int i = 0;
string input;
set<string> mat_friends;
set<string> pat_friends;
set<string> all_friends;
set<string>::iterator p;
do {
cout << "input mat's friends name:(# to quit.) : ";
cin >> input;
if (input == "#")
{
break;
}
mat_friends.insert(input);
} while (1);
for (p = mat_friends.begin(), i = 0; p != mat_friends.end(); p++, i++)
{
cout << i << " : " << *p << endl;
}
do {
cout << "input pat's friend name:(# to quit.) : ";
cin >> input;
if (input == "#")
{
break;
}
pat_friends.insert(input);
} while (1);
for (p = pat_friends.begin(), i++; p != pat_friends.end(); p++, i++)
{
cout << i << " : " << *p << endl;
}
cout << endl << "All friend:" << endl;
set_union(mat_friends.begin(), mat_friends.end(),
pat_friends.begin(), pat_friends.end(),
insert_iterator<set<string> >(all_friends, all_friends.begin())); // 这里是 >(space)>
for (p = all_friends.begin(), i = 0; p != all_friends.end(); p++, i++)
{
cout << i << " : " << *p << endl;
}
cout << endl << "Another way to print: " << endl;
ostream_iterator<string, char> out(cout , "\n");
set_union(mat_friends.begin(), mat_friends.end(),
pat_friends.begin(), pat_friends.end(),
out);
return 0;
}
我是伍栎,一个用文字记录成长的程序猿。:)