STL之list之用法小结
来源:互联网 发布:聚宝盆返奖软件 编辑:程序博客网 时间:2024/05/16 01:54
/*
list: 等同于双向链表,内存空间可以是不连续的,通过指针来进行数据的访问
优: 1)插入/删除效率高
缺: 1)不支持随机存取,查询效率较低
*/
#include <iostream>
#include <string>
#include <list>
using namespace std;
void printList(list<int> nList)
{
//使用迭代器
//list<int>::iterator iter;
//for ( iter = nList.begin(); iter != nList.end(); iter++)
//{
// cout<<*iter<<", ";
//}
//使用迭代器指针
list<int>::iterator *pIter = new list<int>::iterator; //list<int>::iterator *pIter;error,原因见vector相应函数
if ( NULL == pIter )
{
return;
}
for (*pIter = nList.begin(); *pIter != nList.end(); (*pIter)++) //此处不可写成*pIter++
{
cout<<**pIter<<", ";
}
cout<<endl;
}
int main()
{
//创建list
list<int> l1; //创建一个没有任何元素的list
list<int> l2(10); //创建一个有n个元素的list,每个元素值为默认
list<double> l3(10, 9.3); //创建具有10个元素的list,每个元素的初始值为9.3
list<double> l4(l3); //通过拷贝一个list对象的元素,创建一个新的list对象
int iArray[] ={3, 10, 19};
list<int> l5(iArray, iArray + 3);//将另一个list对象的迭代器区间[first, last)所指的元素,拷贝到新创建的list对象中
//初如化赋值 :用push_back将元素依次链入LIST中
for (int i = 1; i<6; i++)
l1.push_back(i);
list<int>::iterator iter;
cout<<"printList(l1): "<<endl;
printList(l1);
//元素插入 :尾部添加用push_back(); 首部插入用push_front();任意位置插入用insert(&pos, elem)
//下面语句error:list与vector不同,因为存储方式上的差异, list不能+n,只能++,
//这种情况下最好还是通过迭代器++为好
//l1.insert((l1.begin())+1, 100);
l1.insert(++l1.begin(), 100); //或者用iter=l1.begin(); iter++;l1.insert(iter, 100);
cout<<"++l1.insert(l1.begin(),100) (if use l1.begin()+1 is error) = "<<endl;
printList(l1);
cout<<"l1.push_back(200) = "<<endl;
l1.push_back(200);
printList(l1);
cout<<"l1.push_front(-200) = "<<endl;
l1.push_front(-200);
printList(l1);
//元素删除: 尾部删除用pop_back(); 首部删除用pop_front();
//指定元素的删除,位置用erase(&pos); 区间用erase(&first_pos, &last_pos)
//删除所有元素用 clear();
//删除list中所有元素值为value的元素用remove(value)
cout<<"l1.pop_back() = "<<endl;
l1.pop_back();
printList(l1);
cout<<"l1.pop_front() = "<<endl;
l1.pop_front();
printList(l1);
cout<<"l1.erase(++l1.begin()) = "<<endl;
l1.erase(++l1.begin());
printList(l1);
iter= l1.begin();
iter++;
iter++;
cout<<"iter=l1.begin; iter++;iter++; l1.erase(l1.begin(), iter) = "<<endl;
l1.erase(l1.begin(), iter);
printList(l1);
cout<<"l1.remove(100) = "<<endl;
l1.remove(100);
printList(l1);
cout<<"l1.remove(4) = "<<endl;
l1.remove(4);
printList(l1);
//其它
cout<<"其它: "<<endl;
list<int> listTest;
for (int i =1; i<6; i++)
listTest.push_back(i*100);
cout<<"printList(listTest) = "<<endl;
printList(listTest);
//swap函数
cout<<"after l1.swap(listTest), l1 = "<<endl;
l1.swap(listTest);
printList(l1);
//splice函数
//void splice(&pos, list &x):将list x归并到当前list的&pos之前,同时list x将被清空
//void splice(&pos, list &x, &x.pos),将list x中迭代器x.pos处的元素归并到当前list,同时被归并的元素将被清空
cout<<"after l1.splice(l1.begin(), listTest):"<<endl;
l1.swap(listTest); //恢复
l1.splice(l1.begin(), listTest);
cout<<"l1 = "<<endl;
printList(l1);
cout<<"listTest = "<<endl;
printList(listTest);
l1.clear();
for (int i = 1; i<6; i++)
l1.push_back(i);
for (int i =1; i<6; i++)
listTest.push_back(i*100); //恢复
cout<<"after l1.splice(++l1.begin(), listTest, --listTest.end()) :"<<endl;
l1.splice(++l1.begin(), listTest, --listTest.end());
cout<<"l1 = "<<endl;
printList(l1);
cout<<"listTest = "<<endl;
printList(listTest);
//merge函数(略)归并的两链表都是是有序性,此函数才有意义
//sort
cout<<"now l1 is set as : "<<endl;
l1.clear();
for (int i = 9; i >= 0; i--)
l1.push_back(i);
printList(l1);
cout<<"l1.sort() = "<<endl;
l1.sort();
printList(l1);
cout<<"l1.empty() = "<<l1.empty()<<", l1.size() = "<<l1.size()<<endl;
cout<<"after l1.clear(): "<<endl;
l1.clear();
cout<<"l1.empty() = "<<l1.empty()<<", l1.size() = "<<l1.size()<<endl;
}
list: 等同于双向链表,内存空间可以是不连续的,通过指针来进行数据的访问
优: 1)插入/删除效率高
缺: 1)不支持随机存取,查询效率较低
*/
#include <iostream>
#include <string>
#include <list>
using namespace std;
void printList(list<int> nList)
{
//使用迭代器
//list<int>::iterator iter;
//for ( iter = nList.begin(); iter != nList.end(); iter++)
//{
// cout<<*iter<<", ";
//}
//使用迭代器指针
list<int>::iterator *pIter = new list<int>::iterator; //list<int>::iterator *pIter;error,原因见vector相应函数
if ( NULL == pIter )
{
return;
}
for (*pIter = nList.begin(); *pIter != nList.end(); (*pIter)++) //此处不可写成*pIter++
{
cout<<**pIter<<", ";
}
cout<<endl;
}
int main()
{
//创建list
list<int> l1; //创建一个没有任何元素的list
list<int> l2(10); //创建一个有n个元素的list,每个元素值为默认
list<double> l3(10, 9.3); //创建具有10个元素的list,每个元素的初始值为9.3
list<double> l4(l3); //通过拷贝一个list对象的元素,创建一个新的list对象
int iArray[] ={3, 10, 19};
list<int> l5(iArray, iArray + 3);//将另一个list对象的迭代器区间[first, last)所指的元素,拷贝到新创建的list对象中
//初如化赋值 :用push_back将元素依次链入LIST中
for (int i = 1; i<6; i++)
l1.push_back(i);
list<int>::iterator iter;
cout<<"printList(l1): "<<endl;
printList(l1);
//元素插入 :尾部添加用push_back(); 首部插入用push_front();任意位置插入用insert(&pos, elem)
//下面语句error:list与vector不同,因为存储方式上的差异, list不能+n,只能++,
//这种情况下最好还是通过迭代器++为好
//l1.insert((l1.begin())+1, 100);
l1.insert(++l1.begin(), 100); //或者用iter=l1.begin(); iter++;l1.insert(iter, 100);
cout<<"++l1.insert(l1.begin(),100) (if use l1.begin()+1 is error) = "<<endl;
printList(l1);
cout<<"l1.push_back(200) = "<<endl;
l1.push_back(200);
printList(l1);
cout<<"l1.push_front(-200) = "<<endl;
l1.push_front(-200);
printList(l1);
//元素删除: 尾部删除用pop_back(); 首部删除用pop_front();
//指定元素的删除,位置用erase(&pos); 区间用erase(&first_pos, &last_pos)
//删除所有元素用 clear();
//删除list中所有元素值为value的元素用remove(value)
cout<<"l1.pop_back() = "<<endl;
l1.pop_back();
printList(l1);
cout<<"l1.pop_front() = "<<endl;
l1.pop_front();
printList(l1);
cout<<"l1.erase(++l1.begin()) = "<<endl;
l1.erase(++l1.begin());
printList(l1);
iter= l1.begin();
iter++;
iter++;
cout<<"iter=l1.begin; iter++;iter++; l1.erase(l1.begin(), iter) = "<<endl;
l1.erase(l1.begin(), iter);
printList(l1);
cout<<"l1.remove(100) = "<<endl;
l1.remove(100);
printList(l1);
cout<<"l1.remove(4) = "<<endl;
l1.remove(4);
printList(l1);
//其它
cout<<"其它: "<<endl;
list<int> listTest;
for (int i =1; i<6; i++)
listTest.push_back(i*100);
cout<<"printList(listTest) = "<<endl;
printList(listTest);
//swap函数
cout<<"after l1.swap(listTest), l1 = "<<endl;
l1.swap(listTest);
printList(l1);
//splice函数
//void splice(&pos, list &x):将list x归并到当前list的&pos之前,同时list x将被清空
//void splice(&pos, list &x, &x.pos),将list x中迭代器x.pos处的元素归并到当前list,同时被归并的元素将被清空
cout<<"after l1.splice(l1.begin(), listTest):"<<endl;
l1.swap(listTest); //恢复
l1.splice(l1.begin(), listTest);
cout<<"l1 = "<<endl;
printList(l1);
cout<<"listTest = "<<endl;
printList(listTest);
l1.clear();
for (int i = 1; i<6; i++)
l1.push_back(i);
for (int i =1; i<6; i++)
listTest.push_back(i*100); //恢复
cout<<"after l1.splice(++l1.begin(), listTest, --listTest.end()) :"<<endl;
l1.splice(++l1.begin(), listTest, --listTest.end());
cout<<"l1 = "<<endl;
printList(l1);
cout<<"listTest = "<<endl;
printList(listTest);
//merge函数(略)归并的两链表都是是有序性,此函数才有意义
//sort
cout<<"now l1 is set as : "<<endl;
l1.clear();
for (int i = 9; i >= 0; i--)
l1.push_back(i);
printList(l1);
cout<<"l1.sort() = "<<endl;
l1.sort();
printList(l1);
cout<<"l1.empty() = "<<l1.empty()<<", l1.size() = "<<l1.size()<<endl;
cout<<"after l1.clear(): "<<endl;
l1.clear();
cout<<"l1.empty() = "<<l1.empty()<<", l1.size() = "<<l1.size()<<endl;
}
- STL之list之用法小结
- 转贴:STL之list之用法小结
- 转贴:STL之list之用法小结
- C++学习 STL之list之用法小结
- STL之list 用法
- STL之list的用法
- STL容器用法之List(转载)
- C++STL之list用法总结
- STL之四:list用法详解
- STL之List用法注意问题
- STL之list容器用法详解
- C++之STL的list用法总结
- STL之list容器函数用法详解
- STL之四:list用法详解
- STL之四:list用法详解
- STL之四:list用法详解
- STL学习之七:list用法示例
- STL之容器小结
- 多条件搜索,sql语句,决对经典的拼接写法
- http://sd.csdn.net/a/20120618/2806682.html
- 拖地机概念
- Objective-c 程序结构
- 66算法系列-66漫谈topK 问题
- STL之list之用法小结
- 手动给网站添加ping服务for php
- win7 无法联网解决方案
- 静态方法和实例化方法的区别
- [黑马程序员]多线程学习总结
- 使用 live555 直播来自 v4l2 的摄像头图像
- Euler
- 标准成本还是实际成本 成本核算标准选择
- ComplexT