[C++][STL](一)vector和stack的学习

今天学习了一点关于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来实现的

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值