码迷,mamicode.com
首页 > 其他好文 > 详细

【STL基础】list

时间:2014-05-23 09:49:56      阅读:314      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   c   code   java   

list

构造函数:

bubuko.com,布布扣
//default:
list<T> l;            //空的list

//fill:
list<T> l(n);                //n个元素, 元素默认初始化
list<T> l(n, value);        //n个元素值为value

//range:
list<T> l(first, last);     //两个迭代器之间的元素构成
list<T> l(arr, arr + sizeof(arr) / sizeof(T));    //由内置数组构造

//copy:
list<T> l(const list<T> &t);        //v是u的拷贝

//move:
list<T> l(list<T> &&x);    //x是右值引用(只能引用右值,如list<int> &&x = {1,2,3};)

//initializer list:
list<T> l{value1, value2...};
bubuko.com,布布扣

赋值与swap:

l1 = l2;
l1 = { 1, 2, 3 };
l1.swap(l2);
swap(l1, l2);

大小:

size_type l.size() const noexcept;    //元素数目
size_type l.max_size() const noexcept;    //可容纳元素的最大数目 
bool l.empty()    //是否为空
l.resize(n);        
l.resize(n, value); 

获取元素:

l.front();    //首元素
l.back();    //尾元素

修改:

bubuko.com,布布扣
//assign
l.assign(n, value);    //将v置为n个值为value的元素
l.assign(first, last);    //用t的两个迭代器之间的值为l赋值,左闭右开 t可以是vector、array、list、forward_list、deque、set、unordered_set、multiset、unordered_multiset等。 元素的顺序和重复性由传入的容器类型性质决定
l.assign(begin(t), end(t));       //与上条语句类似,除上述类型,还支持内置数组类型
l.assign(arr, arr + n);    //将数组中的一部分赋给l
l.assign({value1, value2...});    //列表

l.push_back(value);    //尾部插入一个元素
l.push_front(value);    //首部插入一个元素
l.pop_back();         //删除最后一个元素
l.pop_front();        //删除第一个元素

//insert
l.insert(it, value);    //迭代器指向的位置插入值为value的元素
l.insert(it, n, value);    //迭代器指向的位置插入n个值为value的元素
l.insert(it, first, last);    //迭代器it指向的位置插入另一个容器的两个迭代l之间的元素         
l.insert(it, x);        //x是T的右值引用 T&&
l.insert(it, {value1, value2...});    //列表
//以上函数返回一个指向新插入的第一个元素的迭代器

//emplace(C++11)
l.emplace(it,  args);    //以args为参数,调用T的构造函数构造一个对象插入it所指的位置
l.emplace_back(args);    //将构造的T对象插入尾部
l.emplace_front(args);    //插入前端
//以上函数返回一个指向新插入的元素的迭代器

//erase
l.erase(it);    //删除it指向的元素
l.erase(first, last);    //删除范围内的元素
//以上函数返回一个迭代器,指向被删除的最后一个元素之后的元素

l.clear();    //删除所有元素
bubuko.com,布布扣

修改:

bubuko.com,布布扣
//splice
l.splice(it, x);     
l.splice(it, x, itx);    //x为引用或右值引用,将x的内容拼接到it指向的位置处. 该过程不包括构造和析构过程,而是元素的转移。如果给定itx则是转移x中itx指向的元素
l.splice(it, first, last);

list<int> l1 {1,2,3};
list<int> l2 {10, 20, 30};
l1.splice(l1.begin(), l2);    //l1: 1, 10, 20, 30, 2, 3

l.remove(value);    //删除所有等于value的元素
l.remove_if(pred);    

// list::remove_if
#include <iostream>
#include <list>

// a predicate implemented as a function:
bool single_digit (const int& value) { return (value<10); }
// a predicate implemented as a class:
struct is_odd {
  bool operator() (const int& value) { return (value%2)==1; }
};
int main ()
{
  int myints[]= {15,36,7,17,20,39,4,1};
  std::list<int> mylist (myints,myints+8);   // 15 36 7 17 20 39 4 1
  mylist.remove_if (single_digit);           // 15 36 17 20 39
  mylist.remove_if (is_odd());               // 36 20return 0;
}

l.unique();
l.unique(binary_pred);
#include <iostream>
#include <cmath>
#include <list>

// a binary predicate implemented as a function:
bool same_integral_part (double first, double second)
{ return ( int(first)==int(second) ); }
// a binary predicate implemented as a class:
struct is_near {
  bool operator() (double first, double second)
  { return (fabs(first-second)<5.0); }
};
int main ()
{
  double mydoubles[]={ 12.15,  2.72, 73.0,  12.77,  3.14,
                       12.77, 73.35, 72.25, 15.3,  72.25 };
  std::list<double> mylist (mydoubles,mydoubles+10);
  
  mylist.sort();             //  2.72,  3.14, 12.15, 12.77, 12.77,
                             // 15.3,  72.25, 72.25, 73.0,  73.35
  mylist.unique();           //  2.72,  3.14, 12.15, 12.77
                             // 15.3,  72.25, 73.0,  73.35
  mylist.unique (same_integral_part);  //  2.72,  3.14, 12.15
                                       // 15.3,  72.25, 73.0
  mylist.unique (is_near());           //  2.72, 12.15, 72.25return 0;
}

l.merge(x);
l.merge(x, comp);
// list::merge
#include <iostream>
#include <list>
// compare only integral part:
bool mycomparison (double first, double second)
{ return ( int(first)<int(second) ); }
int main ()
{
  std::list<double> first, second;
  first.push_back (3.1);
  first.push_back (2.2);
  first.push_back (2.9);
  second.push_back (3.7);
  second.push_back (7.1);
  second.push_back (1.4);
  first.sort();
  second.sort();
  first.merge(second);
  // (second is now empty)
  second.push_back (2.1);
  first.merge(second,mycomparison);
  std::cout << "first contains:";
  for (std::list<double>::iterator it=first.begin(); it!=first.end(); ++it)
    std::cout <<   << *it;
  std::cout << \n;
  return 0;
}
//first contains: 1.4 2.2 2.9 2.1 3.1 3.7 7.1

l.sort();
l.sort(comp);
bool compare_nocase (const T &first, const T &second);

l.reverse();
bubuko.com,布布扣

获取迭代器:

bubuko.com,布布扣
l.begin(), l.end();    //首元素位置,尾后位置
l.cbegin(), l.cend();    //const_iterator

//reverse_iterator    按逆序寻址
//const_reverse_iterator
l.rbegin(), l.rend();
l.crbegin(), l.crend();

begin(l), end(l);
bubuko.com,布布扣

 

【STL基础】list,布布扣,bubuko.com

【STL基础】list

标签:style   class   blog   c   code   java   

原文地址:http://www.cnblogs.com/dengeven/p/3737913.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!