25.list使用一个双向链表来管理元素。
26.list不支持随机存取。如果要存取第5个元素,就得遍历前4个元素。所以,在list中随机遍历任意元素,是很缓慢的行为。
27.由于不支持随机存取,list既不提供下标运算符,也不提供at()。
28.list并未提供容量、空间重新分配等操作函数,因为全无必要。每个元素都有自己的内存,在被删除之前一直有效。
29. list常用到的函数:
25.splice函数在一个链表中插入另一个链表的元素。
39.stack中的函数:(默认是由deque存的)
empty() 堆栈为空则返回真
pop() 移除栈顶元素
push() 在栈顶增加元素
size() 返回栈中元素数目
top() 返回栈顶元素
39.代码如下:
#include "Utility.h"
void main()
{
//---------默认deque实现的stack--------
stack<int> iStack_deque;
iStack_deque.push(1);
iStack_deque.push(4);
iStack_deque.push(2);
iStack_deque.push(8);
iStack_deque.push(5);
cout << "iStack_deque中元素个数为:" << iStack_deque.size() << endl;
int iSum = 0;
//输出stack中的元素
while (!iStack_deque.empty())
{
cout << iStack_deque.top() << ",";
iSum += iStack_deque.top();
iStack_deque.pop();
}
cout << endl;
cout << "iStack_deque中数据之和为:" << iSum << endl;
cout << "iStack_deque中元素个数为:" << iStack_deque.size() << endl;
//---------默认vector实现的stack--------
stack<int, vector<int>> iStack_vector;
iStack_vector.push(11);
iStack_vector.push(14);
iStack_vector.push(12);
iStack_vector.push(18);
iStack_vector.push(15);
//遍历
while (!iStack_vector.empty())
{
cout << iStack_vector.top() << ",";
iStack_vector.pop();
}
cout << endl;
//---------默认list实现的stack--------
stack<int, list<int>> iStack_list;
iStack_list.push(311);
iStack_list.push(314);
iStack_list.push(312);
iStack_list.push(318);
iStack_list.push(315);
//遍历
while (!iStack_list.empty())
{
cout << iStack_list.top() << ",";
iStack_list.pop();
}
cout << endl;
//-------stack的构造函数用法-------
deque<int> myDeque(2, 100);
vector<int> myVector(3, 200);
stack<int> first;
stack<int> second(myDeque);
stack<int, vector<int> > third;
stack<int, vector<int> > fourth(myVector);
cout << "size of first: " << (int)first.size() << endl;
cout << "size of second: " << (int)second.size() << endl;
cout << "size of third: " << (int)third.size() << endl;
cout << "size of fourth: " << (int)fourth.size() << endl;
system("pause");
}
39.list容器代码如下:
#include "Utility.h"
template<typename T>
void printContainer(T _container)
{
for (T::const_iterator iter = _container.cbegin();
iter != _container.cend();
++iter)
{
cout << (*iter) << ",";
}
cout << endl;
}
template<typename T>
void printContainer_reverse(T _container)
{
for (T::reverse_iterator riter = _container.rbegin();
riter != _container.rend();
++riter)
{
cout << (*riter) << ",";
}
cout << endl;
}
bool Mod2(int _value)
{
if (_value % 2 == 0)
return true;
return false;
}
template<typename T>
class is_odd : public unary_function < T, bool >
{
public:
bool operator( ) (T& value)
{
return (value % 2) == 1;
}
};
bool greater(int _value1, int _value2)
{
if (_value1 >= _value2)
return true;
return false;
}
void main()
{
//--------list容器----------
//基本函数请自行使用
int iArray[10] = { 1, 3, 2, 4, 8, 9, 5, 6, 10, 7 };
list<int> iList1(iArray, &iArray[5]);
if (!iList1.empty())
{
cout << "iList1第一个元素为:" << iList1.front() << endl;
cout << "iList1最后一个元素为:" << iList1.back() << endl;
}
printContainer(iList1);
printContainer_reverse(iList1);
iList1.push_back(12);
iList1.push_front(23);
printContainer(iList1);
list<int>::iterator iter = iList1.begin();
++iter;
++iter;
iList1.erase(iter);
printContainer(iList1);
//---------list容器独有的函数成员splice()----------
cout << "------list容器独有的函数成员splice()-------" << endl;
int iArray2[10] = { 1, 3, 6, 2, 3, 7, 9, 4, 8, 0 };
list<int> iList2(iArray2, &iArray2[5]);
list<int> iList3(&iArray2[5], &iArray2[10]);
list<int>::iterator pos = iList2.end();//13623
//++pos;
//++pos;
//++pos;
list<int>::iterator first = iList3.begin();//79480
++first;
++first;
list<int>::iterator last = first+1;
//++last;
//++last;
//++last;
//++last;
iList2.splice(iList2.end(), iList3, first, last);
printContainer(iList2);
printContainer(iList3);
//---------list容器独有的函数成员remove(value)----------
//移除值为value的所有元素
cout << "---------list容器独有的函数成员remove(value)----------" << endl;
iList2.remove(3);
printContainer(iList2);
//---------list容器独有的函数成员remove_if()----------
//移除满足条件的所有元素
cout << "---------list容器独有的函数成员remove_if()----------" << endl;
//iList2.remove_if(Mod2);//移除偶数
iList2.remove_if( is_odd<int>() ); //移除奇数
printContainer(iList2);
//---------list容器独有的函数成员unique()----------
//移除相邻且重复的元素,只留下1个
cout << "---------list容器独有的函数成员unique()----------" << endl;
list<int> iList4;
iList4.push_back(11);
iList4.push_back(22);
iList4.push_back(22);
iList4.push_back(33);
iList4.push_back(33);
iList4.unique();
printContainer(iList4);
//---------list容器独有的函数成员sort()----------
//升序排序
cout << "---------list容器独有的函数成员sort()----------" << endl;
int iArray3[10] = { 87,6458,63,4,9,391,3,14,9,475 };
list<int> iList5(&iArray3[0],&iArray3[10]);
iList5.sort();
printContainer(iList5);
//---------反序函数---------
cout << "---------反序函数---------" << endl;
iList5.reverse();
printContainer(iList5);
system("pause");
}
6363

被折叠的 条评论
为什么被折叠?



