《从0开始学C++》九(C++数据类型)


前言

什么int、double、char之类的,都是C语言的,现在讲一讲C++新增的
除了string以外,其他新增的都会有<>
对了find函数和迭代器之后统一处理

vector

vector,意思是动态数组,直接说有点不太好表达,举个例子说明一下

#include<iostream>
#include<vector>//需载入vector头文件
	vector<int> a(n);//定义,<>里是类型,()里是长度,也可以不定义长度
	vector<stirng> b;
	a.resize(m);//字符串也可用,重新设置长度
	a.push_back(a.empty());//给最后面加个元素,加A是不是为空(加入1)
	a[1]=5;//a[1]赋值为5
	a.erase(a.end());//删除某个地方,a.end()表示最后面,也可用于string
	a.push_back(3);
	a.pop_back();//把最后面给删掉
	a.insert(a.begin(),2,7);//插入元素,在最开头,插入2元素,元素为7
	cout<<a.size()<<' '<<a.front()<<' '<<a.back();
	//find
	//size是长度,front是最前面的元素,back是最后面的元素
	//输出:3 7 1
	//元素:7 7 1

↑vector常用函数(非全部)
虽然有这么多函数,但是动态数组与数组的唯一区别在于:可以重新设置长度,为什么呢?数组也是可以增删改查的,唯独重新设置长度他不行,但是一般也用不到重设长度,当然,方便是方便了
所以说,除了方便以外,vector性价比不是很高

stack

stack,栈,是一种只可对最后边操作的类型

#include<iostream>
#include<stack>//
	stack<int> a;
	a.push(1);//和vector::push_back一样
	a.pop();//和vector::pop_back()一样
	a.push(3);
	a.push(5);
	cout<<a.top()<<a.size()<<a.empty();
	//size和empty和vector一样,top是告诉栈顶(最后面)元素是什么
	//输出:520
	//元素:3 5

vector的功底打好了,之后就都不用很麻烦了
push和pop可vector一样,size和empty和vector一样,除了top是新增的
用于先进后出、且不用查询的地方,有一个例题是集装箱,只有进货、卸货和告诉你集装箱编号这几个操作,分别对应push、pop和top
stack还有一个最重要的用处,就是前后缀表达式

表达式

后缀表达式:7 5 3 + 2 * + 6 -

先push7、5和3,遇到加号就top前两个数,加起来,变成8,又push一个2,又遇到×,top前两个数乘起来变成16,又遇到+号,top前两个数,加起来,变成23(前面还有一个7没算),push一个6,遇到减号,top前两个数,23-6=17,所以这个算式的结果是17

后缀表达式是计算机运算最简单的一种表达式,所以中缀表达式、前缀表达式一般会先转换为后缀表达式运算
这个算式的中缀表达式为:7+(5+3)*2-6
前缀表达式:7 - + * + 5 3 2 6

queue

queue,队列,是一种只能一头进一头出的类型

#include<iostream>
#include<queue>//
	queue<int> a;
	a.push(5);//压进去一个元素
	a.push(3);//压进去一个元素
	a.push(8);//压进去一元素
	a.pop();//弹出“5”
	cout<<a.front()<<a.back();
	//!front是最后一个进去的元素,back是最先进去的元素
	//输出:38

可以看到,pop弹出去的是最先进去的,这是他和stack的不同点
()

deque

虽然deque有个que,但其实和vector类似,
既然有个que,那就至少得有一点点queue的特性。
queue的特性是“双端”,deque就正好有这个特性
他有和vector一样的函数,不过在基础上加了两个函数,是push_front()pop_front()

deque既然和vector一样,还多了两个函数,谁还用vector呢?vector也是有优点的,deque有一个缺陷,用[]访问时,会比vector的[]

list

list,列表(或链表),是一种由头尾相连的值构成的类型
和deque类似(wtf),不过不能做成员访问:[]。只能由迭代器遍历,这个下一次讲。
既然和deque一样,还不能成员访问,谁还用list呢?list也是有优点的,他的时间复杂度很低,就是说操作是一瞬间就完成的,比他们快很多

后记

下一次说迭代器和find

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值