C++栈初步认识
1.使用栈实现字符串反转
当我们需要在程序中实现一个"先进后出"的数据结构时,栈就是一个很好的选择。在C++中,我们可以通过STL提供的stack类来使用栈。
stack类模板定义在头文件中。使用时需要在代码中包含该头文件。
例如,我们可以使用如下方式定义一个整型栈:
#include<stack>
std::stack<int> s;
其中,int代表栈中存储的数据类型。我们可以使用push()方法将元素压入栈中,使用pop()方法弹出栈顶元素,使用top()方法获取栈顶元素(但不弹出),使用empty()方法判断栈是否为空,使用size()方法获取栈的大小。
例如,下面是一个简单的使用栈实现字符串反转的例子:
#include<iostream>
#include<string>
#include<stack>
using namespace std;
int main()
{
std::string str="hello world";
std::stack<char> s;
//将字符串中的每个字符压入栈中
for(char c:str) {
s.push(c);
}
//依次弹出栈顶元素并输出,即可实现字符串反转
while (!s.empty()) {
std::cout<<s.top();
s.pop();
}
std::cout<<std::endl;
return 0;
}
使用栈可以很方便地实现一些数据结构或算法,可以大大简化代码。
2.范围for循环
上面的for(char c:str) 又是怎么回事呢?
for循环中的 char c : str 是C++11新标准中的一种遍历容器(例如字符串、数组等)的语法格式,被称为范围for循环(range-based for loop)。
这个语法的含义是:对于容器 str 中的每个元素(这里是字符串中的每个字符),都将其赋值给 c 变量,并执行循环体。
范围for循环的语法格式如下:
for (elem : collection) {
// 循环体
}
其中,elem 表示容器中的元素,collection 表示容器本身,循环变量的类型和容器中元素的类型一致。
例如,对于一个整型数组,可以使用如下方式遍历:
int arr[]={1,2,3,4,5};
for(int x:arr) {
std::cout<<x<<" ";
}
输出结果为:
1 2 3 4 5
使用范围for循环可以使代码更加简洁易读,尤其是对于容器类型的数据结构,可以方便地遍历每个元素,而不用关心容器的具体实现方式。