紫书总结 第5章 C++与STL入门

5.1.从C到C++

## 5.1.1C++框架
1.在C头文件之前加一个 c 然后去掉 .h 后缀

#include<iostream>

iostream提供了输入输出流

#include<algorithm>

algorithm提供了一些常用的算法。

while(cin >> a >> b)

从标注输入中读取 a ,返回值是一个 “已经读取了 a 的新流”,然后从这个新流中继续读取 b,如果流已经读完,while循环将退出。
(但缺点是运行太慢。输入量很大时不要用C++的流输入。)

using namespace std;

简化输入输出操作。使其存在于 名称空间std 中(用 cin 代替 是 std::cin …)。在工程上不推荐这样做。

声明数组时,数组大小可以用 const 声明的常数。
C++中多了用 bool 来表示布尔值,用 true 和 false 来表示真假。

5.1.2.引用
引用功能上比指针弱,但减少了出错的可能提高了代码的可读性。
在参数名前面加上 “&” 就表示这个参数按照引用的方式传递,而不是传值方式传递。这样,在函数内改变参数的值,也会修改到函数的实参。

5.1.3.字符串
C++中提供了新的 string 类型用来替代 C 中的字符数组。
string 头文件中定义了 string 类型,直接支持流式读写。但速度有些慢。

#include<iostream>
#include<string>
#include<sstream>
using namespace std;

int main(){
 string line;
 while(getline(cin, line)) {      \\读取一行数据
 	int sun = 0, x;
 	stringstream ss(line);        \\创建字符串流读取ss
 	while(ss >> x) sum += x;
 	cout << sum << "\n";
 	}
 return 0;
 }

string 很慢, sstream 更慢,应谨慎使用。

5.1.4.再谈结构体
C++ 不再需要用 typedef 的方式定义一个 struct 。
且在 struct 里除了可以有变量(成员变量)之外还可以有函数(成员函数)。

[ 工程中 一般用 struct 定义纯数据的类型,只包含较少的辅助成员函数。而 class 定义拥有复杂行为的类型。]

没有返回值的函数称为 构造函数。在声明变量时使用。

struct Point {
 int x, y;
 Point(int x = 0, int y = 0 : x(x), y(y) {}
 // Point(int x = 0, int y = 0) {this->x = x; this->y = y }
 };

“ = 0 ” 指 0 为默认值。也就是 Point()相当于 Point(0,0)。
“ :x(x), y(y) ” 表示成员变量 x 的初始化为参数 x ,成员变量 y 初始化为参数 y 。
“ this " 为指向当前对象的指针。“ this-> x” 等价于 “(*this).x” 为当前对象的成员变量 x 。

5.1.5.模板

5.2.STL初步

5.2.1.排序与检索
sort 使用数组元素默认的大小比较运算符进行排序,只有在需要按照特殊依据进行排序时才要传入额外的比较函数。
sort 可以给任意对象排序,包括内置类型和自定义类型。前提是类型定义了 “<” 运算符。
unique 函数可以删除有序数组中的重复元素。

5.2.2.不定长数组 vector
若 a 是一个 vector 。
a.size() 可读取它的大小。 a.resize() 可改变它的大小。 a.push_back() 可向尾部添加元素。 a.pop_back() 可删除最后一个元素。

vector<int>a    //类似于int a[] 的整数数组
vector<double>b

声明一个vector。
vector 是一个模板类,可以直接赋值,可作为函数的参数或返回值。

5.2.3.集合 set
每个元素最多出现一次。自定义类型可以构造 set 但必须定义“小于”运算符。
set 中元素是按照从小到大排序的。

for(set<string>::iterator it == dict.begin(); it != dict.end(); ++it)
//元素的遍历

iterator 迭代器。用法类似于指针。
begin 和 and 是仿照STL中迭代器命名的。

5.2.4.映射 map
map 是键到值的映射。重载了 [] 运算符。也称为:关键数组。

map<string,int>month_name   //月份名字到月份编号
month_name["July"] = 7      //赋值

两者都支持 insert、find、count、remove 操作,且可以按照从小到大的顺序遍历其中的元素


5.2.5. 栈、队列与优先队列
STL的栈定义在头文件中,可以用 stacks 声明一个栈。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值