容器与算法
来源:互联网 发布:windows10 mac主题 编辑:程序博客网 时间:2024/06/06 08:57
operator ():重载小括号
模板偏特化
模板中const:对类型进行严格检测
const T*指向一个常量的指针
1.类模板显示特化
2.默认模板参数
3.成员模板
4.模板类的成员函数可以是一个模板
已结有了vector添加成员,就需要成员函数
关键字typename:作为类型前的标识符
template
class MyClass
typename T::SubType * ptr;
指出subType是T中定义的一个类型,因此ptr是一个指向T::SubType的指针,如果不加tynename那么表达式被认为是T中的静态成员SubType和ptr的乘积
除了typename修饰以为,template内的任何标识符都可以被视为一个值,而非一个类型。
typename的第二个作用:在模板中替换关键字class
template class Test
容器:
序列式容器
vector deque list
关联式容器:
set multiset map multimap
vector
pushback分配内存
relloc:拷贝到新的内存,释放原来的内存
Vectors:将元素置于一个动态数组加以管理;
可以随机存取元素;
数组尾部添加或者移除元素非常快速,但是在中部或头部安插元素比较费时。
Deques:
不需要变长,容量较小可用到array;
需要变长,容量较大用到vector;
#include<iostream>#include<list>#include<stdio.h>using namespace std;int main() { list<int> mylist; mylist.push_back(1); mylist.push_back(2); mylist.push_back(3); mylist.push_back(4); auto ibegin = mylist.begin(); //指针,指向了一个迭代器,迭代器存储了一个位置 auto iend = mylist.end(); for (; ibegin != iend; ibegin++) { cout << *ibegin << endl; printf("%p\n", ibegin); } cin.get(); return 0;}
list中的删除erase()
mylist.erase(mylist.begin);
#include<iostream>#include<list>#include<stdio.h>using namespace std;int main() { list<int> mylist; mylist.push_back(1); mylist.push_back(2); mylist.push_back(3); mylist.push_back(4); auto ibegin = mylist.begin(); //指针,指向了一个迭代器,迭代器存储了一个位置 auto iend = mylist.end(); for (; ibegin != iend; ibegin++) { if((*ibegin)==3){ mylist.erase(ibegin); break; //删除后,迭代器的begin和end发生了变化,不break的话会发生中断异常 } auto ibegin = mylist.begin(); //指针,指向了一个迭代器,迭代器存储了一个位置 auto iend = mylist.end(); for(;ibegin!=iend;ibegin++){ cout << *ibegin << endl; printf("%p\n", ibegin); } } cin.get(); return 0;}
链式存储,不允许下标访问,只允许迭代器,链表迭代器只能使用++ –
如mylist[1]就是错误的,只能使用迭代器访问
clear:清空链表
push_back;
push_front;
mylist.insert(ibegin,30);// 位置,值
mylist.remove(); //remove是直接根据元素的值删除,如remove(30)就是删除值为30的元素。
删除或者插入跌代器的时候,begin和end都发生了变化,所以需要break;
mylist.rbegin();
mylist.rend();
mylist.merge(mylist2);//将链表合并 (合并之前必须要有序,mylist1.sort() mylist2.sort(),然后在merge),merge之后的list也是有序的。
mylist.unique();unique也依赖于排序
如果没排好序,那么仅会删除最后一个重复。如果sort了,那么会删除所有重复的。
set
myset.insert();
myset.find();
迭代器
迭代器本质是个指针,但是是经过优化的;ib类内部有个指针p,每次打印ib的值都是一样的,但是ib内部的值是拒绝访问的。
printf(“%p,%p\n”,ib, ib._Ptr); 0x1234564 0000000;
printf(“%p,%p\n”,ib._Ptr,ib); 每次的ib._Ptr值不一样,ib的值都是一样
struct print{ void operator()(int x){ std::cout<<x<<std::endl; }};
for_each(a,a+5,print());//遍历每一个元素,用结构体封装了这个方法,然后进行重载
类模板需要实例化;
printf()是怎么发生作用的?
//等于调用print的()函数,for_each第三个参数是一个函数
//第三个参数是函数指针
//加上(),把类名当做函数名来使用
//类名当做函数名,重载了(),直接调用();
multiset
multiset.insert;
bind1st仿函数:可以实现一定的算法策略
auto ifind = find_if(mylist.begin(),mylist.end(),bind1st(greater(),3 )); //过滤>3的数
- c++ 容器与算法
- C++容器与算法
- 容器与算法
- STL源码----容器与算法
- 数据结构与算法:STL容器
- 泛型算法与容器
- 数据结构与算法:STL容器
- Cpp Primer<<学习容器与算法--顺序容器_8
- STL中的容器、迭代器与算法
- Boost 库 容器、数据结构与算法
- Boost 库 容器、数据结构与算法续
- Java容器与Hash算法的研究
- 泛型算法与容器的关系
- STL的容器、算法与迭代器
- C++ STL 容器与算法概述
- 容器与容器适配器
- 系统程序员成长计划-容器与算法(一)(上)
- 系统程序员成长计划-容器与算法(一)(下)
- linux sort,uniq,cut,wc命令详解
- 编码字符集Unicode与编码方式UTF-8是个什么样的关系
- JavaScript对嵌套数组做扁平化处理
- Android音频系统之音频框架
- .idea文件
- 容器与算法
- 非零基础新手学编程的路径及注意事项
- C语言数据结构——遍历二叉树
- 使用Tomcat安装版启动项目
- 表连接的方法+使用表连接而不是多个表查询+from字句表的顺序
- STL map常用操作
- 精通Dubbo——dubbo2.0源码中的设计模式与SPI介绍
- 【Oracle】——虚拟机安装
- 历经沧桑,唯有研究心静自然