STL容器

1、迭代器与指针的差别:

转自:https://blog.csdn.net/gogokongyin/article/details/51206225

迭代器:
      (1) 迭代器不是指针,是类模板,表现的 指针。 他只是 模拟了 指针的一些功能,通过 重载了指针的一些操作符,->,*,++ --等封装了指针 ,是一个“可遍历STL( Standard Template Library)容器内全部或部分元素”的对象, 本质是封装了原生指针,是指针概念的一种提升(lift),提供了比指针更高级的行为,相当于一种智能指针,他可以根据不同类型的数据结构来实现不同的++,--等操作;
      (2)迭代器返回的是 对象引用而不是对象的值 ,所以cout只能输出迭代器使用 *取值 后的值而不能直接输出其自身。

      (3)在设计模式中有一种模式叫迭代器模式,简单来说就是提供一种方法,在不需要暴露某个容器的内部表现形式情况下,使之能依次访问该容器中的各个元素,这种设计思维在STL中得到了广泛的应用,是STL的关键所在,通过迭代器,容器和算法可以有机的粘合在一起,只要对算法给予不同的迭代器,就可以对不同容器进行相同的操作。

ite=find(vec.begin(),vec.end(),88);  
vec.insert(ite,2,77);  //迭代器标记的位置前,插入数据;  
cout<<*ite<<endl;  //会崩溃,因为迭代器在使用后就释放了,*ite的时候就找不到它的地址了; 
注:迭代器在使用后就释放了,不能再继续使用,但是指针可以!!

指针:
         指针能指向函数而迭代器不行,迭代器只能指向容器 ;指针是迭代器的一种。指针只能用于某些特定的容器;迭代器是指针的抽象和泛化。所以,指针满足迭代器的一切要求。

        总之,指针和迭代器是有很大差别的,虽然他们表现的行为相似,但是本质是不一样的!一个是类模板,一个是存放一个家伙的地址的指针变量。

2、STL merge()函数

转自:https://blog.csdn.net/qwq1503/article/details/80088796

////////////////////////////////////////
//      2018/04/26 8:26:09
//      list-merge

// merge two lists

#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>

using namespace std;

int main(){
    int ary[] = { 2, 5, 9, 7, 2, 7, 6, 5 };
    list<int> list1(ary, ary + 4);
    list<int> list2(ary + 4, ary + 8);;

    cout << "list1:";
    copy(list1.begin(), list1.end(), ostream_iterator<int>(cout, " "));
    cout << endl;

    cout << "list2:";
    copy(list2.begin(), list2.end(), ostream_iterator<int>(cout," "));
    cout << endl;

    //you have to sort data before mergring it
    list1.sort();
    list2.sort();

    list1.merge(list2);

    cout << "After\"list1.merge(list2)\":" << endl;
    cout << "list1:";
    copy(list1.begin(),list1.end(),ostream_iterator<int>(cout," "));
    cout << endl;
    cout << "size of list1 = " << list1.size() << endl;
    cout << "list2:";
    copy(list2.begin(), list2.end(),ostream_iterator<int>(cout," "));
    cout << endl;
    cout << "size of list2 = " << list2.size() << endl;
    return 0;
}

/*
OUTPUT:
    list1:2 5 9 7
    list2:2 7 6 5
    After"list1.merge(list2)":
    list1:2 2 5 5 6 7 7 9
    size of list1 = 8
    list2:
    size of list2 = 0
*/

猜你喜欢

转载自blog.csdn.net/qq_16334327/article/details/80489811