目录
vector容器
vector对象的默认构造
vector的初始化
vector的遍历
vector的增删改查
vector末尾的添加移除操作
vector的数据存取
deque容器
deque对象的默认构造
deque末尾的添加移除操作
deque的数据存取
stack容器
stack对象的默认构造
stack的push()与pop()方法
stack对象的拷贝构造与赋值
stack的遍历
queue容器
queue容器的初始化及遍历
list容器
list头尾的添加移除操作
list的数据存取
list的插入
list的删除
序列式容器(Sequence containers)在c++中主要有三种:vector、deque、list 。
vector尾部添加或移除元素非常快速。但是在中部或头部插入元素或移除元素比较费时。
vector采用模板类实现,vector对象的默认构造形式
vector
vector
vector
vector
... //尖括号内还可以设置指针类型或自定义类型。
Class CA{};
vector
vector
//vector的初始化
void main32()
{
vector v1;
v1.push_back(1);
v1.push_back(3);
v1.push_back(5);
v1.push_back(7);
vector v2 = v1;
vector v3(v1.begin(), v1.begin() + 2);
}
主要有两种方式,数组方式遍历和迭代器方式的遍历。
void printV(vector& v)
{
for (int i = 0; i < v.size(); i++)
{
cout << v[i] << " ";
}
cout << endl;
}
void main35()
{
vector v1(10);
for (int i = 0; i < 10; i++)
{
v1[i] = i + 1;
}
for (vector::iterator it = v1.begin(); it != v1.end(); it++)
{
cout << *it << " ";
}
cout << endl;
//逆向遍历
for (vector::reverse_iterator rit = v1.rbegin();rit != v1.rend(); rit++)
{
cout << *rit << " ";
}
}
vector
vecInt.push_back(1); //在容器尾部加入一个元素
vecInt.push_back(3);
vecInt.push_back(5);
vecInt.push_back(7);
vecInt.push_back(9);
vecInt.pop_back(); //移除容器中最后一个元素
vecInt.pop_back();
//{5 ,7 ,9}
vec.at(idx); //返回索引idx所指的数据,如果idx越界,抛出out_of_range异常。
vec[idx]; //返回索引idx所指的数据,越界时,运行直接报错
vector
vecInt.at(2) == vecInt[2] ; //5
vecInt.at(2) = 8; 或 vecInt[2] = 8;
vecInt 就包含 1, 3, 8, 7, 9值
int iF = vector.front(); //iF==1
int iB = vector.back(); //iB==9
vector.front() = 11; //vecInt包含{11,3,8,7,9}
vector.back() = 19; //vecInt包含{11,3,8,7,19}
//vector 删除
void main36()
{
vector v1(10);
for (int i = 0; i < 10; i++)
{
v1[i] = i + 1;
}
//区间删除
v1.erase(v1.begin(), v1.begin() + 3);
printV(v1);
//根据元素的位置删除
v1.erase(v1.begin());
printV(v1);
//根据元素的值
v1[1] = 2;
v1[3] = 2;
printV(v1);
for (vector::iterator it = v1.begin(); it != v1.end();)
{
if (*it == 2)
{
it = v1.erase(it);//当删除迭代器所指向的元素的时候,erease删除函数会让it自动下移动
}
else
{
it++;
}
}
printV(v1);
v1.insert(v1.begin(), 100);
v1.insert(v1.end(), 200);
printV(v1);
}
deque采用模板类实现,deque对象的默认构造形式:deque
deque
deque
deque
//尖括号内还可以设置指针类型或自定义类型。
void main41()
{
deque d1;
d1.push_back(1);
d1.push_back(3);
d1.push_back(5);
d1.push_front(-11);
d1.push_front(-33);
d1.push_front(-55);
printD(d1);
cout << endl;
cout << "头部元素:" << d1.front() << endl;
cout << "尾部元素:" << d1.back() << endl;
d1.pop_front();
d1.pop_back();
printD(d1);
cout << endl;
//查找-33在数组下标的值
deque::iterator it = find(d1.begin(), d1.end(), -33);
if (it != d1.end())
{
cout << "-33数组下标是" << distance(d1.begin(), it) << endl;
}
else
{
cout << "没有找到值为-33的元素" << endl;
}
}
stack采用模板类实现, stack对象的默认构造形式: stack
stack
stack
stack
//尖括号内还可以设置指针类型或自定义类型。
//栈模型
//栈的算法和栈容器数据类型的分离
void main51()
{
stack s;
//入栈
for (int i = 0; i < 10; i++)
{
s.push(i + 1);
}
cout << "栈的大小" << s.size() << endl;
//出栈
while (!s.empty())
{
//获取栈顶元素
int tmp = s.top();
cout << tmp << " ";
s.pop();//弹出栈顶元素
}
}
stack.push(elem); //往栈头添加元素
stack.pop(); //从栈头移除第一个元素
stack(const stack &stk); //拷贝构造函数
stack& operator=(const stack &stk); //重载等号操作符
void main52()
{
Teacher5 t1, t2, t3;
t1.age = 31;
t2.age = 32;
t3.age = 33;
stack s;
s.push(t1);
s.push(t2);
s.push(t3);
while (!s.empty())
{
Teacher5 tmp = s.top();
tmp.prinT();
s.pop();
}
}
queue采用模板类实现,queue对象的默认构造形式:queue
queue
queue
queue
//尖括号内还可以设置指针类型或自定义类型。
//队列中基本数据类型
void main61()
{
queue q;
q.push(1);
q.push(2);
q.push(3);
cout << "队头元素" << q.front() << endl;
cout << "队列的大小" << q.size() << endl;
while (!q.empty())
{
int tmp = q.front();
cout << tmp << " ";
q.pop();
}
}
list采用采用模板类实现,对象的默认构造形式:list
list
list
list
//尖括号内还可以设置指针类型或自定义类型。
void main71()
{
list l;
cout << "list的大小:" << l.size() << endl;
for (int i = 0; i < 10; i++)
{
l.push_back(i);//尾部插入元素 尾插法
}
cout << "list的大小:" << l.size() << endl;
list::iterator it = l.begin();
while (it != l.end())
{
cout << *it << " ";
it++;
}
cout << endl;
//lsit不能随机访问
it = l.begin();
it++;
it++;
it++;
//it += 5; 不支持随机的访问容器
l.insert(it, 100);//100插入在什么位置
for (list::iterator it = l.begin(); it != l.end(); it++)
{
cout << *it << " ";
}
//结论1:链表的结点的index序号是从0号位置开始
//结论2:在3号位置插入元素,是让原来的3号位置变成4号位置 原来的4号位置变成5号位置
}
lst.remove(elem); //删除容器中所有与elem值匹配的元素
//list删除
void main72()
{
list l;
cout << "list的大小:" << l.size() << endl;
for (int i = 0; i < 10; i++)
{
l.push_back(i);//尾部插入元素 尾插法
}
cout << "list的大小:" << l.size() << endl;
list::iterator it = l.begin();
while (it != l.end())
{
cout << *it << " ";
it++;
}
cout << endl;
list::iterator it1 = l.begin();
list::iterator it2 = l.begin();
it2++;
it2++;
it2++;
l.erase(it1, it2);
it = l.begin();
while (it != l.end())
{
cout << *it << " ";
it++;
}
cout << endl;
l.insert(l.begin(), 100);
l.insert(l.begin(), 100);
l.insert(l.begin(), 100);
it = l.begin();
while (it != l.end())
{
cout << *it << " ";
it++;
}
cout << endl;
l.erase(l.begin());
it = l.begin();
while (it != l.end())
{
cout << *it << " ";
it++;
}
cout << endl;
l.remove(100);
it = l.begin();
while (it != l.end())
{
cout << *it << " ";
it++;
}
cout << endl;
}