STL标准库(三)序列容器之list

如下一个程序进行演示讲解

#include 需要包含该迭代器

template

void print(T Begin, T end)

{

    for (T i = Begin; i != end; ++i)

    {

       std::cout << *i << std::endl;

    }

    std::cout << std::endl;

}

int main()

{

    std::list obj(5,123);  定义一个int类型5个元素初始化为123的双向链表,obj是迭代器,该迭代器是struct std::bidirectional_iterator_tag 双向迭代器 支持++ -- != == = * ,不支持[] + - += -=

    std::list::iterator it = obj.begin(); 定义一个迭代器有两种方式,此时是第一种方式定义

    std::cout << *it << std::endl; 打印值为123

    print(obj.begin(), obj.end()); 模板函数也可以应用

    for (size_t i = 0; i < 5; i++) 遍历初始化该双向链表容器

    {

       *it = i;

       it++;

    }

    auto endit = obj.end(); 此时为另一种方式定义迭代器

    endit--; 指向尾部前一个

    std::cout << *endit << std::endl; 打印4

    print(obj.begin(), obj.end());从头到尾打印

    obj.push_back(666); 尾部插入666

    obj.push_front(111); 头部插入111

    auto bit = obj.begin(); 再次定义一个迭代器

由于只有随机访问迭代器支持直接任何位置插入或删除,所以下面讲述list容器任意位置的插入和删除

    for (size_t i = 0; i < 5; i++) 利用for循环进行任意位置的插入

    {

       bit++;

       if (i == 3)

       {

           obj.insert(bit, 5,555); 在bit这个位置插入5,555,可以一次插入多个元素

           break;

       }

    }

只有随机访问迭代器支持直接任何位置插入或删除

    obj.front() = 12138;

    obj.back() = 128;

    print(obj.rbegin(), obj.rend()); 基于反向迭代器的遍历,从后到前打印

    obj.pop_back(); 尾部元素弹出

    obj.pop_front(); 头部元素弹出

    for (size_t i = 0; i < 5; i++) 从任意位置弹出元素

    {

       bit++;

       if (i == 3)

       {

           obj.erase(bit);

           break;

       }

    }

    obj.erase(obj.begin(),obj.end()); 指定范围内所有元素弹出

    obj.clear(); 清空该容器所有元素

    system("pause");

    return 0;

}

你可能感兴趣的:(c++,list,开发语言)