今日结果: (STL) standard Template Library
1 STL : 属于泛型编程,泛型化程序设计思想
2 STL组件: container(容器): 各种基本的数据结构
Iterator(迭代器)(一种指向容器的指针)面向对象的
容器(向量vector), 双端队列(deque) , 列表(list),iterator(循环子)
3 堆栈和队列的操作。
push_back() // 将新元素加入尾部
pop_back() // 将最后一个元素出栈
加入头文件 : #include <vector> , using namespace std;
vector<int> vec; // 定义个容器,(只允许从尾部出栈) int的类型 或各种类型
写数据: vec.push_back(i); // 尾部加入元素
读数据: printf("%d\n", vec.back()); // 访问最后一个元素
vec.pop_back(); // 最后一个元素出栈
list<int> l; // 允许从前面出出栈, 加入头文件 #include <lis>
l.front(); // 访问前面栈的值
l.pop_front(); // 从前面出栈
l.at(i); // 只有vector 和 deque有at方法。 (有检测异常)
或l[i]; // 访问下标为i的元素,(没有检测异常)
vector<char*> l; // 可以加入任意类型,也可以加入结构体
读结构体中数据 : l[i].id , l[i].name;
4 表的操作:begin(); // 指向第一个元素 end() ; // 指向最后一个元素
insert(p, x); // 把x 元素放在p之前
如: l.insert(l.begin(), data); // 插入头部
l.insert(l.begin(), 3, data); // 向头部插入3个数据
[fist: last)
包括 不包括
l.insert(l.begin(), vec.begin(), vec.begin() + 2) // 向容器中加入容器数据
开始存数据位置
l.size(); // 计算元素个数
l.erase(l.begin()); // 删除第一个元素
l.erase(l.begin(), l.begin + 9); // 删除一个区间里的元素
l.clear() ; // 清楚所有的元素, 但容器还在,内容释放了
l.empty(); // 测试容器是否为空(true)
l.resize(); // 改变容器的大小
l.swap(); // 交换两个容器内容(一般需要两个容器类型一样)
如:l.swap(vec2);
if(vec2 < l) // 测试一个包容器是否在另一个包容器字典序列之前
如: 1 2 3 4
1 2
vector<DATA>::iterator lp; //定义一个迭代器 lp当作一个指针
lp = l.begin(); printf("%d, %s\n", (*lp).id, (*lp).name);
#include <algorithm> // 算法头文件
lp = find(l.begin(), l.end(), 3); // 在l.begin()~l.edn()区间内查找值为3的元素
返回值真确指向找到的元素,无则指向容器尾部
迭代器: 它提供访问容器
5 顺序容器:向量(vector) (动态数组)
与数组不同,向量内存用尽时,向量会自动分配更大的连续内存区,将原先的元素复制到
新的内存区中,然后删除旧的内存区
明日计划:练习STL的一些习题,修复qq的实现功能,理解第三阶段的项目。
感想:现在感觉事情越来越多,但是有些事情,自己既然已经开始做了,就尽全力的完成它,
合理安排时间。
1 STL : 属于泛型编程,泛型化程序设计思想
2 STL组件: container(容器): 各种基本的数据结构
Iterator(迭代器)(一种指向容器的指针)面向对象的
容器(向量vector), 双端队列(deque) , 列表(list),iterator(循环子)
3 堆栈和队列的操作。
push_back() // 将新元素加入尾部
pop_back() // 将最后一个元素出栈
加入头文件 : #include <vector> , using namespace std;
vector<int> vec; // 定义个容器,(只允许从尾部出栈) int的类型 或各种类型
写数据: vec.push_back(i); // 尾部加入元素
读数据: printf("%d\n", vec.back()); // 访问最后一个元素
vec.pop_back(); // 最后一个元素出栈
list<int> l; // 允许从前面出出栈, 加入头文件 #include <lis>
l.front(); // 访问前面栈的值
l.pop_front(); // 从前面出栈
l.at(i); // 只有vector 和 deque有at方法。 (有检测异常)
或l[i]; // 访问下标为i的元素,(没有检测异常)
vector<char*> l; // 可以加入任意类型,也可以加入结构体
读结构体中数据 : l[i].id , l[i].name;
4 表的操作:begin(); // 指向第一个元素 end() ; // 指向最后一个元素
insert(p, x); // 把x 元素放在p之前
如: l.insert(l.begin(), data); // 插入头部
l.insert(l.begin(), 3, data); // 向头部插入3个数据
[fist: last)
包括 不包括
l.insert(l.begin(), vec.begin(), vec.begin() + 2) // 向容器中加入容器数据
开始存数据位置
l.size(); // 计算元素个数
l.erase(l.begin()); // 删除第一个元素
l.erase(l.begin(), l.begin + 9); // 删除一个区间里的元素
l.clear() ; // 清楚所有的元素, 但容器还在,内容释放了
l.empty(); // 测试容器是否为空(true)
l.resize(); // 改变容器的大小
l.swap(); // 交换两个容器内容(一般需要两个容器类型一样)
如:l.swap(vec2);
if(vec2 < l) // 测试一个包容器是否在另一个包容器字典序列之前
如: 1 2 3 4
1 2
vector<DATA>::iterator lp; //定义一个迭代器 lp当作一个指针
lp = l.begin(); printf("%d, %s\n", (*lp).id, (*lp).name);
#include <algorithm> // 算法头文件
lp = find(l.begin(), l.end(), 3); // 在l.begin()~l.edn()区间内查找值为3的元素
返回值真确指向找到的元素,无则指向容器尾部
迭代器: 它提供访问容器
5 顺序容器:向量(vector) (动态数组)
与数组不同,向量内存用尽时,向量会自动分配更大的连续内存区,将原先的元素复制到
新的内存区中,然后删除旧的内存区
明日计划:练习STL的一些习题,修复qq的实现功能,理解第三阶段的项目。
感想:现在感觉事情越来越多,但是有些事情,自己既然已经开始做了,就尽全力的完成它,
合理安排时间。