starnet 阅读(871) 评论(3)

(二)list使用参考

关于list

ListSTL模版库中经常被使用的一个容器类,也叫模版类。基本功能就是实现了链表的各种操作。所谓容器类或模版类,就是这个类模版(或容器)可以实例化成C++支持的和用户自定义的各种数据类型的链表操作类!模版和容器不经过实例化是不能使用的,实例化的过程,就是告诉编译器具体要把链表类作为一个对什么数据类型进行操作的链表类。我们在实际的使用过程中,链表操作必须针对确定的数据类型。模版经过实例化之后,编译器就知道了如何为链表分配内存空间。不经过实例化,编译器不知道什么数据类型的链表,也就不知道如何分配内存。这就是模版或容器的含义。

List主要用法

// list_class_insert.cpp

// compile with: /EHsc

#include <list>  //使用STL链表必须包含这样的头文件

#include <iostream>

 

int main( )

{

   using namespace std;

//把链表模版类实例化成支持整形数据类型的链表操作类

   list <int> c1, c2;         

//必须有这一行代码:定义链表的迭代器,实际上就是定义指向链表元素的指针,链表元素通过迭代器来操作

list <int>::iterator Iter;

   //向链表中添加元素,push_back(),表示添加在链表尾部,还可以从任意位置添加

   c1.push_back( 10 );

   c1.push_back( 20 );

   c1.push_back( 30 );

   c2.push_back( 40 );

   c2.push_back( 50 );

   c2.push_back( 60 );

   //begin()end()用于获取链表的头指针和尾指针,进一步赋值给迭代器就可以操作了

   cout << "c1 =";

   for ( Iter = c1.begin( ); Iter != c1.end( ); Iter++ )

      cout << " " << *Iter;

   cout << endl;

 

   Iter = c1.begin( );

   Iter++;

   c1.insert( Iter, 100 );

   cout << "c1 =";

   for ( Iter = c1.begin( ); Iter != c1.end( ); Iter++ )

      cout << " " << *Iter;

   cout << endl;

 

   Iter = c1.begin( );

   Iter++;

   Iter++;

   c1.insert( Iter, 2, 200 );

 

   cout << "c1 =";

   for ( Iter = c1.begin( ); Iter != c1.end( ); Iter++ )

      cout << " " << *Iter;

   cout << endl;

 

   c1.insert( ++c1.begin( ), c2.begin( ),--c2.end( ) );

 

   cout << "c1 =";

   for ( Iter = c1.begin( ); Iter != c1.end( ); Iter++ )

      cout << " " << *Iter;

   cout << endl;

}


评论列表
blog of vc_stude
list析构过程
~list()
{erase(begin(), end());
_Freenode(_Head);
_Head = 0, _Size = 0; }
iterator erase(iterator _F, iterator _L)
{while (_F != _L)
erase(_F++);
return (_F); }
iterator erase(iterator _P)
{_Nodeptr _S = (_P++)._Mynode();
_Acc::_Next(_Acc::_Prev(_S)) = _Acc::_Next(_S);
_Acc::_Prev(_Acc::_Next(_S)) = _Acc::_Prev(_S);
allocator.destroy(&_Acc::_Value(_S));
_Freenode(_S);
--_Size;
return (_P); }
周星星
re: (二)list使用参考

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

int main()
{
    using namespace std;

    //把链表模版类实例化成支持整形数据类型的链表操作类
    list<int> c1;

    //向链表中添加元素,push_back(),表示添加在链表尾部,还可以从任意位置添加
    c1.push_back( 10 );
    c1.push_back( 20 );
    c1.push_back( 30 );

    //begin()和end()用于获取链表的头指针和尾指针,进一步赋值给迭代器就可以操作了
    cout << "c1 =";
    for ( list <int>::iterator itor=c1.begin(); itor!=c1.end(); ++itor )
        cout << " " << *itor;
    cout << endl;

    list <int>::iterator itor = c1.begin();
    ++itor;
    c1.insert( itor, 100 );

    cout << "c1 =";
    for ( list <int>::iterator itor=c1.begin(); itor!=c1.end(); ++itor )
        cout << " " << *itor;
    cout << endl;

    itor = c1.begin();
    //++itor;
    //++itor;
    advance( itor, 2 );
    c1.insert( itor, 2, 200 );

    cout << "c1 =";
    for ( list <int>::iterator itor=c1.begin(); itor!=c1.end(); ++itor )
        cout << " " << *itor;
    cout << endl;

    list<int> c2;
    c2.push_back( 40 );
    c2.push_back( 50 );
    c2.push_back( 60 );

    c1.insert( ++c1.begin(), c2.begin(),--c2.end() );

    cout << "c1 =";
    for ( list <int>::iterator itor=c1.begin(); itor!=c1.end(); ++itor )
        cout << " " << *itor;
    cout << endl;

}

发表评论
切换编辑模式