c++11标准模板库(STL) - list、forward_list

2018-07-09 16:14:58

list 是双向链表,每个元素都会有两个指针,一个指向前面元素,一个指向后面元素。

优点是可以在任意处高效率地插入或移除,list 也可以对内部数据进行排序。

缺点是不能直接访问元素,只能通过迭代器遍历访问,所以元素个数不允许太多。

详细说明读者可以参考 list - C++ Reference  

//成员函数
list::assign
list::back
list::begin
list::cbegin
list::cend
list::clear
list::crbegin
list::crend
list::emplace
list::emplace_back
list::emplace_front
list::empty
list::end
list::erase
list::front
list::get_allocator
list::insert
list::max_size
list::merge
list::operator=
list::pop_back
list::pop_front
list::push_back
list::push_front
list::rbegin
list::remove
list::remove_if
list::rend
list::resize
list::reverse
list::size
list::sort
list::splice
list::swap
list::unique
#include <iostream>
#include <list>
#include <string>
#include <cctype>

//会依次传入相邻两个元素来比较,返回false会交换顺序
bool compare_nocase (const std::string& first, const std::string& second){
  unsigned int i=0;
  
  //不区分大小写比较
  while ( (i<first.length()) && (i<second.length()) ){
    if (tolower(first[i])<tolower(second[i])) return true;
    else if (tolower(first[i])>tolower(second[i])) return false;
    ++i;
  }
  return ( first.length() < second.length() );
}

int main (){
  std::list<std::string> mylist;
  std::list<std::string>::iterator it;
  mylist.push_back ("one");
  mylist.push_back ("two");
  mylist.push_back ("Three");
  mylist.push_back ("freecls");
  mylist.push_back ("hello");

  //默认排序
  mylist.sort();

  std::cout << "mylist contains:";
  for (it=mylist.begin(); it!=mylist.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';
  
  //利用回调函数排序
  mylist.sort(compare_nocase);

  std::cout << "mylist contains:";
  for (it=mylist.begin(); it!=mylist.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}
[root@192 c++]# g++ -std=c++11 main.cpp 
[root@192 c++]# ./a.out 
mylist contains: Three freecls hello one two
mylist contains: freecls hello one Three two


forward_list 是单向链表,每个元素都包含一个指针指向下一个元素。相较于 list 它的优点是些许的节约资源。缺点是只能往前迭代,不能往后。

详细说明读者可以参考 forward_list - C++ Reference


 备注

1.编译器版本gcc4.8.5,运行环境centos7 64位
2.本文只做简单记录用,详细用法读者可以参考文中给出的链接
3..原文地址http://www.freecls.com/a/2712/96

 

©著作权归作者所有
收藏
推荐阅读
简介
天降大任于斯人也,必先苦其心志。