今天学习了一点关于STL的知识,遇到一些问题,先小结如下:
一、vector
1. 如何引用STL?#include<vector>
2. 如何初始化vector的元素?利用构造函数来初始化vector,简单地可以通过
vector<int>v{1,2,3,4,5,6,7,8};
3. 如何顺序输出v?
多种方法:
a.用auto避免纠结
vector<int> v{1,2,3,4,5,6,7,8};
for (auto i : v) {
cout << i << " ";
}
cout << endl;
b.利用[]
vector<int> v{1,2,3,4,5,6,7,8};
for (int i = 0;i < v.size();i++) {
cout << v[i] << "";
}
cout << endl;
c.利用decltype也可以输出(decltype(表达式),[返回值的类型是表达式参数的类型])
vector<int> v{1,2,3,4,5,6,7,8};
for (decltype(v.begin()) i=v.begin();i <v.end();i++) {
cout << *i << " ";
}
cout << endl;
d.使用迭代器。C++priner中写道:不用在意迭代器的类型,因此我们可以利用:
for (auto i = v.begin();i < v.end();i++)
二、stack:
栈的实现比较简单,一般是通过继承其它类来实现的,它的操作也比较少,小结如下:
a.构造函数:stack<T>s 创建空的stack
stack<T>s1(s2) 复制一个stack
注意不能这样初始化: stack<T>s{1,2,3,4};
b.一些操作:
s.top() 返回栈顶元素
s.push(elem) 将某个元素压入栈顶
s.pop() 弹出栈顶元素,注意不返回该元素
遇到的问题及思考:
1.为什么不能像vector那样输出stack?
因为stack不能遍历,没有迭代器,故可以通过下面的程序来输出stack的元素:
#include<iostream>
#include<stack>
usingnamespace std;
int main() {
stack<int> istack;
istack.push(1);
istack.push(2);
istack.push(3);
istack.push(4);
while (!istack.empty()) {
cout << istack.top() <<" ";
istack.pop();
}
cout << endl;
while (1);
return 0;
}
2. 初始化stack:
一是:deque<int> mydeque(2, 100);
stack<int> second(mydeque);
二是:stack<int> mystack;
mystack.push(1);
mystack.push(2);
3. 书上出现了stack<int,list<int>>istack;其含义是什么?
在STL中栈有两个参数
template < class T, classContainer = deque<T> > class stack;
参数示意:
T: 元素类型
Container: 被用于存储和访问元素的的类型
元素类型是必要的,容器类型是可选的
由此可看出上面的stack是基于list来实现的