Java教程

【笔记】STL的七种武器

本文主要是介绍【笔记】STL的七种武器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

(0)启示:程序=算法+数据结构

参考资料:C++迭代器(STL迭代器)iterator详解 (biancheng.net)

 

 

< ITERATOR >

1.(算法-迭代器-容器)

迭代器是一种 检查容器内元素 并 遍历元素 的数据类型。

C++更趋向于使用迭 代器而不是下标操作,因为标准库为每一种标准容器(如vector)定义了一种 迭代器类型,而只用少数容器(如vector)支持下标操作访问容器元素。

 

2.迭代器按照定义方式分成以下四种。

1)正向迭代器

 容器类名::iterator  迭代器名;

2) 常量正向迭代器

 容器类名::const_iterator  迭代器名;

3) 反向迭代器

 容器类名::reverse_iterator  迭代器名;

4) 常量反向迭代器

 容器类名::const_reverse_iterator  迭代器名;

 

3.*迭代器名就表示迭代器指向的元素。通过非常量迭代器还能修改其指向的元素。

迭代器都可以进行++操作。反向迭代器和正向迭代器++后移动方向不同。

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> v;  //v是存放int类型变量的可变长数组,开始时没有元素
    for (int n = 0; n<5; ++n)
        v.push_back(n);  //push_back成员函数在vector容器尾部添加一个元素
    vector<int>::iterator i;  //定义正向迭代器
    for (i = v.begin(); i != v.end(); ++i) {  //用迭代器遍历容器
        cout << *i << " ";  //*i 就是迭代器i指向的元素
        *i *= 2;  //每个元素变为原来的2倍
    }
    cout << endl;
    //用反向迭代器遍历容器
    for (vector<int>::reverse_iterator j = v.rbegin(); j != v.rend(); ++j)
        cout << *j << " ";
    return 0;
}
View Code

 

4.后置++要多生成一个局部对象 tmp,因此执行速度比前置的慢。

同理,迭代器是一个对象,STL 在重载迭代器的++运算符时,后置形式也比前置形式慢。

 

5.STL 中有用于操作迭代器的三个函数模板,它们是:
  • advance(p, n):使迭代器 p 向前或向后移动 n 个元素。
  • distance(p, q):计算两个迭代器之间的距离,即迭代器 p 经过多少次 + + 操作后和迭代器 q 相等。如果调用时 p 已经指向 q 的后面,则这个函数会陷入死循环。
  • iter_swap(p, q):用于交换两个迭代器 p、q 指向的值。

 

< CONTAINER >顺序容器

0.vector deque双端队列 list双向链表 

 

1.常用算法函数

a.front();                 a.back(); 

a.size();                  a.clear();   

a.push_front(x);      a.pop_front();

a.push_back(x);      a.pop_back();

a.insert(it, x);           

a.erase(it);               a.erase(first, last)

 

暂未完结,14号接着写

这篇关于【笔记】STL的七种武器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!