Geekband C++面向对象高级程序设计-第六周课程1

#C++ STL标准库与泛型编程

#写在前面

  1. 重要网站介绍
    1. www.cpluspluc.com
    2. en.cppreference.com
    3. gcc.gnu.org
  2. 重要书籍介绍
    1. THE C++ STANDARD LIBRARY
    2. STL源码剖析

#STL简要介绍

STL六大部件:

1.容器。(存放数据,内存结构已经配置完成)

2.分配器。(支持容器的数据存放)

3.算法。(独立模板函数,对容器数据进行操作)

4.迭代器。(算法与容器的桥梁,帮助遍历容器中的数据)

5.适配器。(对于容器进行一些转换)

6.仿函数。(作用类似一个函数)

#六大部件的示例程序

  #补充说明

  1. allocator分配器的使用范例.11行中vector<int,allocator<int>> 第一个参数int指明存放int类型数据,allocator分配器指明分配int字节大小的内存。若allocator所分配内存大小内容与allocator所需要的内容不同那么会出现错误。
    count_if为算法,在STL中最重要的两部分内容之一。
    1. vi(ia,ia+6)设置初值的方式有多种,需要进一步进行知识补充。
  2. vi.begin(),vi.end()是迭代器,用来遍历容器中的数据。
  3. bind2nd为函数适配器,猜测本为比较两个对象,但现在第二个对象是数值所以所以需要进行一种转换,用到了函数适配器。
  4. not1也为一个函数适配器,否定bind2nd的返回值,返回值为是与否。
  5. less是仿函数。

#复杂度

  1. O(1)或者O(C):常数时间。
  2. O(n):线性时间。
  3. O(log2n):次线性时间。
  4. O(n2):平方时间。
  5. O(n3):立方时间。
  6. O(2n):指数时间。
  7. O(nlog2n):介于线性以及二次方成长的中间。

#"前闭后开"区间

  

  #解释说明:STL中各个容器所开辟的空间不一定为连续的内存空间,比如说链表,树结构。同时类似于普通数组,其最末尾.end()内不能存储内容空间大小为左闭右开。迭代器同时类似于指针,可以使用*取值,->指向内容。++,--进行遍历操作。具体如下:

  #代码示例

Container<T> c;
Container<T>::iterator ite = c.begin();
for(;ite!=c.end();++ite){
} 

#range-based for statement(since C++11)

  #语法形式

for(decl:coll){
    statement
}

  #代码示例 

for(int i:{2,3,5,7,9,13,17,19}){ cout<<i<<endl; }

std::vector<double> vec;

for(auto elem:vec){
    cout <<elem <<endl;
}

for(auto& elem:vec){
    elem* = 3;
}

 #auto keyword

  #auto代码的更多应用

list<string> c;
list<string>::iterator ite;
ite=::find(c.begin(),c.end,target);

  可改写为如下形式:

list<string> c;
auto ite=::find(c.begin(),c.end(),target); 
posted @ 2018-02-06 16:42  SKY-不认输  阅读(114)  评论(0编辑  收藏  举报