数据结构

Stl 概述

1、标准模板库

作用:提高同用算法的高效实现,省时,安全。

 

2、三大组键

容器  :存储数据

分类  :序列式容器:vector list   关联试容器: map  set

特点 : 封装(相对安全) 全是深拷贝

算法: 容器初始化、排序、插入、删除(提供操作)

迭代器: 遍历容器(遍历数组)  模拟指针(不同迭代器不可混用) ++   --   *等

 

#include<string>

string st ="hello world";

st.puah_back( ' a ');  //在尾部插入 a

st.compare(" hello world ")    //比较字符串函数  compare

 

一、 Stl的优缺点

  优:开发效率高,相对安全

         代码可读性强,算法优秀

         封装了流行的数据结构和算法

  缺:是模板,提供通用方法(某些方向不完美)  Cstring  一些库,没有合适的库

 

Vector  动态数组

  优:省内存,随机访问方便

  缺:插入,删除不方便  重分佩内存要逐个拷贝

 

List  链表(双向循环链表)

优:插入,删除效率高,合并方便

缺: 随机存储,查找不方便,比vector费内存

 

deque (数组+链表)

优:两端插入,删除比较方便,访问较方便。

缺:比vector更费内存

特点:vector+list   优缺点折中

 

map set 二叉数(红黑树)

 优:方便查找(已序)

 缺:插入,删除代价高

 

重点:

1、容器不同实现,不同设计目的,不同特性选场合

2、提高程序效率,选合适的数据结构

3、每种容器对应的数据结构

 

vector类: 

eg:  vector < int >vec;  //定义vector 类型是  int的  

    vec.push_back ( );//在后面插入一个数据

list< int > lis;

 lis.pop_back ( );//在后面删除一个数据

 

push 压栈   pop  出栈

vec.assign(10,1)//初始化10个1  assign({1,2,3,4,5,6,7});//初始化数组

for(auto S :vec)

{

  cout<< S <<endl;   //打印10个1   ( cout << vec.at (数组下标) << endl; )

}

 

   vec . at(8)  返回一个元素的引用(通过下标)超过范围就会异常 

vec.size()求当前元素个数

vec.capacity() 当前最多存放多少个元素

vec.max_size() 最多能申请的大小

 

for(auto S::vec)  //遍历所有元素

{

  cout << S << endl;

}

 

迭代器模拟的是指针   (类似于指针)

auot  it  =vec.begin();//返回第一个元素

for( ; it!=vec.end(); it++)

{

   cout << *it <<endl;

}

 

begin  是第一个地址中的元素    rend是动态数组第一个地址前的一个数  end是超尾  rbegin 是数组最后的一个数   

 

#include<algorithm>  //算法

 

sort ( vec.begin() , vec.end() ); //两个迭代器

for(auto it=vec.begin() ; it!=vec.end(); it++)   it 是is_max   (bod  is_max(int a,int b) { return a>b; })  

{

   cout << *it <<endl;

}

 

posted @ 2018-08-15 09:37  猎人7号  阅读(35)  评论(0)    收藏  举报