STL中list用法解析

来源:互联网 发布:淘宝发布宝贝怎么保存 编辑:程序博客网 时间:2024/05/16 06:28

   STL是StandardTemplateLibrary的简称,标准模板库,惠普实验室开发的一系列软件的统称。它是由AlexanderStepanov、MengLee和DavidRMusser在惠普实验室工作时所开发出来的。这可能是一个历史上最令人兴奋的工具的最无聊的术语。从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。STL现在是C++的一部分,因此不用额外安装什么.

   这里,我将会讲解标准库里的list的使用方法。
 
1构造函数

这里举例几种方法定义一个list.
(1)定义list为空时(不放任何元素)    list<int> first;
(2)定义list中的元素为n相同的值       list<int> second(4,100);
(3)定义list以另外定义好的list的begin()和end()来实现     list<int> third(second.begin(),second.end());
(4)定义list直接以另一个list拷贝构造  list<int> fourth (third);

2 完成opertator=的重载
 

list<int> first(1);//定义一个类型为list<int> 的first,  first.begin()为1list<int> second(3);//定义一个类型为list<int> 的second,  second.begin()为3first=second;

3插入元素
(1)用list中的push_back(尾插)和push_front(头插)插入元素到list中
list<int> mylist;mylist.push_back(1);mylist.push_back(2);mylist.push_back(3);mylist.push_front(0);
(2)用insert插入元素
list<int> first(5,1);//定义一个list存放 5 个1   first: 1,1,1,1,1,first.insert(first.begin(),999);在begin位置前插入 ,则first: 999,1,1,1,1,1,first.insert(first.end(),666);在end位置前插入,    first:999,1,1,1,1,1,666


在指定位置插入n个相同值得元素
// inserting into a list#include <iostream>#include <list>int main (){  std::list<int> mylist;  std::list<int>::iterator it;  // set some initial values:  for (int i=1; i<=5; ++i) mylist.push_back(i); // 1 2 3 4 5  it = mylist.begin();  ++it;       // it points now to number 2           ^  mylist.insert (it,10);                        // 1 10 2 3 4 5  // "it" still points to number 2                      ^  mylist.insert (it,2,20);                      // 1 10 20 20 2 3 4 5  --it;       // it points now to the second 20            ^std::cout << "mylist contains:";  for (it=mylist.begin(); it!=mylist.end(); ++it)    std::cout << ' ' << *it;  std::cout << '\n';  return 0;}


4 删除元素
(1)用 pop_front(头删)和pop_back(尾删)
list<int> first;声明一个listfirst.push_back(1);first.push_back(2);first.push_back(3);//插入1,2,3,到first中。first:1,2,3,first.pop_front();//删除第一个元素  first:2,3
first.pop_back();//删除最后一个元素  first:2

(2)用erase删除指定位置元素
   
// erasing from list#include <iostream>#include <list>int main (){  std::list<int> mylist;  std::list<int>::iterator it1,it2;  // set some values:  for (int i=1; i<10; ++i) mylist.push_back(i*10);                              // 10 20 30 40 50 60 70 80 90  it1 = it2 = mylist.begin(); // ^^  advance (it2,6);            // ^                 ^  ++it1;                      //    ^              ^  it1 = mylist.erase (it1);   // 10 30 40 50 60 70 80 90                              //    ^           ^  it2 = mylist.erase (it2);   // 10 30 40 50 60 80 90                              //    ^           ^  ++it1;                      //       ^        ^  --it2;                      //       ^     ^  mylist.erase (it1,it2);     // 10 30 60 80 90                              //        ^  std::cout << "mylist contains:";  for (it1=mylist.begin(); it1!=mylist.end(); ++it1)    std::cout << ' ' << *it1;  std::cout << '\n';  return 0;}



5遍历list中的元素
#include <iostream>#include <list>int main (){  int myints[] = {75,23,65,42,13};  std::list<int> mylist (myints,myints+5);  std::cout << "mylist contains:";  for (std::list<int>::iterator it=mylist.begin(); it != mylist.end(); ++it)    std::cout << ' ' << *it;  std::cout << '\n';  return 0;}

定义了一个迭代器it,其指向了mylist中的第一个元素,通过mylist.begin()来得到。再与mylist.end()的返回值比较。
 for (std::list<int>::iterator it=mylist.begin(); it != mylist.end(); ++it)

6 list是否为空,为空则返回真


 while (!mylist.empty())//mylist不空循环  {     sum += mylist.front();     mylist.pop_front();  }


7正向迭代器 begin  ,end.   反向迭代器  rbegin ,  rend






      STL的关键实际上是iterator。STL算法作为参数使用iterator,他们指出一个范围,有时是一个范围, 有时是两个。STL容器支持iterator,这就是为什么我们说 list<int>::iterator, 或 list<char>::iterator, 或 list<string>::iterator.
     iterator有很好的定义继承性。它们非常有用。某些iterator仅支持对一个容器只读,某些 仅支持写,还有一些仅能向前指,有一些是双向的。有一些iterator支持对一个容器的随机存取。



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 公司被公安局查封社保怎么办 小米四开不了机怎么办 小米的手机后壳裂了怎么办 公司没钱拖欠员工社保怎么办 小米note充不进去电怎么办 公司欠社保没交怎么办 公司不给转社保怎么办 小米note充电特别慢怎么办 小米小米note2充电慢怎么办 小米note充电红灯不闪烁怎么办 小米note充电红灯闪烁怎么办 小米note2突然充电慢怎么办 充电小米note2手机闪烁怎么办 小米6x上网慢怎么办 小米5数据上网慢怎么办 小米5c照相模糊怎么办 小米5充电很慢怎么办 iphone图库照片没了怎么办 我想通过微信号得到手机号怎么办 给充电宝充电慢怎么办 小米5s充不了电怎么办 百度网盘下载速度慢怎么办 负债累累没有钱没有资源怎么办 好福利密码忘了怎么办 手机无法申请百度网盘怎么办 魅族手机运行慢怎么办 阿里小宝卡流量用完了怎么办 阿里宝卡流量用完了怎么办 百度网盘本地空间不足怎么办 百度网盘空间不足怎么办 百度网盘容量不够怎么办 百度网盘内存不够怎么办 百度网盘储存空间不足怎么办 百度网盘手机号注销了怎么办 手机系统升级后照片没了怎么办 换手机照片没了怎么办 苹果手机icloud满了怎么办 百度网盘密码忘记怎么办 手机卡不用了支付宝账号怎么办 手机校园网不弹出登录界面怎么办 百度云需要邮箱验证怎么办