stack实现了一种先进后出的数据结构,使用时需要包含stack头文件
stack s;//int为栈的数据类型,可以为string,double等
C++中stack的基本操作有:
1、出栈:如 s.pop() 注意并不返回出栈的元素
2、进栈:如 s.push(x)
3、访问栈顶元素:如s.top();
4、判断栈空:如 s.empty() 栈为空时返回true
5、返回栈中元素个数,如:s.size()
#include
#include
using namespace std;
int main()
{
std::stack s; //定义一个int类型的stack
for(int i=0;i<10;i++) //将数字0~9依次入栈
s.push(i);
std::cout << s.empty() << std::endl; //将输出0,表示栈不为空
for(int i=0;i<10;i++)
{
std::cout << s.top() << std::endl;//输出栈顶的元素,依次为9、8、...、0
s.pop(); //出栈
}
std::cout << s.empty() << std::endl;//将输出1,表示栈为空
return 0;
}
C++中的vector是一个可以改变大小的数组,当解题时无法知道自己需要的数组规模有多大时可以用vector来达到最大节约空间的目的。使用时需要包含vector头文件。
vector a; //int为该动态数组的元素数据类型,可以为string、double等
vector a; //三维数据类型为int**,以此类推。
1、push_back(x) 在数组的最后添加元素x。
2、pop_back() 删除最后一个元素,无返回值。
3、at(i) 返回位置i的元素。
4、begin() 返回一个迭代器,指向第一个元素。
5、end() 返回一个迭代器,指向最后一个元素的下一个位置。
6、front() 返回数组头的引用。
7、capacity(x) 为vector分配空间
8、size() 返回数组大小
9、resize(x) 改变数组大小,如果x比之前分配的空间大,则自动填充默认值。
10、insert 插入元素
①a.insert(a.begin(),10); 将10插入到a的起始位置前。
②a.insert(a.begin(),3,10) 将10插入到数组位置的0-2处。
11、erase 删除元素
①a.erase(a.begin()); 将起始位置的元素删除。
②a.erase(a.begin(),begin()+2); 将0~2之间的元素删除。
12、rbegin() 返回一个逆序迭代器,它指向最后一个元素。
13、rend() 返回一个逆序迭代器,它指向的第一个元素前面的位置。
14、clear()清空所有元素。
#include
#include
#include
using namespace std;
int main()
{
vector a;
vector b;
for (int i = 0; i < 10; i++) //向数组a依次添加0~9
a.push_back(i);
a.swap(b); //将数组a元素与数组b元素交换
cout << a.size() << " " << b.size() << endl; //此时应当输出 0 10
for (vector::iterator it = b.begin(); it != b.end(); it++)//从第一个元素开始遍历数组元素
cout << *it << " "; //依次输出0~9
cout << endl;
b.erase(b.begin() + 1); //删除位置1的元素,即元素1.
cout << b.size() << endl; //由于删除了一个元素,此时输出应当为8
for (vector::reverse_iterator rit = b.rbegin(); rit != b.rend(); ++rit)//逆向输出数组元素
cout << *rit << " "; //应当输出9 8 7 6 5 4 3 2 0
cout << endl;
b.resize(9); //将数组空间设定为9,相当于比之前多了1个位置
b.push_back(20);//在尾部添加元素20
for (vector::iterator it = b.begin(); it != b.end(); it++)
cout << *it << " "; //应当输出0 2 3 4 5 6 7 8 9 20
return 0;
}
C++中集合(set)类似于数学上的集合,即每个元素只能出现一次,使用该容器需要包含set头文件。
set s; //int为集合的数据类型,可以为string,double等
1、begin() 返回一个迭代器,指向第一个元素。
2、end() 返回一个迭代器,指向最后一个元素的下一个位置。
3、clear()清空set的所有元素。
4、empty() 判断是否为空。
5、size() 返回当前元素个数
6、erase(it) 删除迭代器指针it指向的元素。
7、insert(a) 插入元素a
8、count() 查找某个元素出现的次数,只有可能为0或1。
9、find() 查找某个元素出现的位置,如果找到则返回这个元素的迭代器,如果不存在,则返回s.end()
#include
#include
#include
using namespace std;
int main()
{
set s;
s.insert(20);
s.insert(10);
s.insert(30);
s.insert(10);
cout << s.size() << endl; //将输出3,因为集合中元素不能重复
for (set::iterator it = s.begin(); it != s.end(); it++)
cout << *it << " "; //将输出10 20 30,集合会自动排序
cout << endl;
//将输出1 0
cout << count(s.begin(), s.end(), 20) << " " << count(s.begin(), s.end(), 40) << endl;
s.erase(s.find(10)); //删除元素10
for (set::iterator it = s.begin(); it != s.end(); it++)
cout << *it << " "; //将输出20 30
return 0;
}
queue实现了一种先进先出的数据结构,使用时需要包含queue头文件。
queue q; //int为队列的数据类型,可以为string,double等
1、入队,如:q.push(x) 将元素x置于队列的末端
2、出队,如: q.pop() 同样不会返回弹出元素的值
3、返回队首元素,如:q.front();
4、返回队尾元素,如:q.back();
5、判断是否为空,如:q.empty();
6、返回队列元素个数,如:q.size();
#include
#include
using namespace std;
int main()
{
queue q;
for(int i = 0;i < 10;i++) //将0~9依次入队
q.push(i);
cout << q.front() << " " << q.back() << endl; //这里应当输出0和9
//依次输出0、1、...、9
for(int i = 0;i < 10;i++)
{
cout << q.front() << " ";
q.pop();
}
return 0;
}
通过学习C++常用模板,在实际刷题过程中可以有效减少代码出错的几率和调试的难度,思路更清晰,代码更加简洁明了,可以有效提高刷题的速度和准确性。