第53讲

来源:互联网 发布:nginx ssl 多证书并存 编辑:程序博客网 时间:2024/05/21 11:13
今日结果:  (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的实现功能,理解第三阶段的项目。


感想:现在感觉事情越来越多,但是有些事情,自己既然已经开始做了,就尽全力的完成它,
合理安排时间。
0 0
原创粉丝点击