学习前,要复习字符串
一.字符串
string s;//
定义字符串
getline(cin,s);//
读取一整行字符串
cin>>s;
按照空格隔开的形式读取字符串
cin.get()//cin
和
getline
之间需要
吃掉换行
s.size();//
求取字符串
s
的长度
【
1
】字符串查找
s.find( );
小括号里面写字符串变量,或者指定的字符串,或者字符变量或者指定的字符
if(s.find(t)!=string::npos) 说明找到了,而且找到的位置下标就是pos=s.find(t);
【
2
】字符串交换
s1.swap(s2)
;或者
swap(s1,s2)
【
3
】字符串清空
s.clear( );
//
小括号里面不需要写东西,这是一个动作,不可以写cout
【
4
】字符串判空
s.empty( );
//
小括号里面不写东西返回值为真或者假
if
(
s.empty())
说明s字符串是空的
if(!s.empty())
说明s字符串是非空的
【
5
】字符串插入
s.insert(pos, str )
;
//
其中
pos
表示要插入的位置的下标,
//str
表示要插入的内容也就是字符串
【
6
】字符串删除
s.erase(pos, len)
;
//
其中
pos
表示要删除的开始位置的下标,
//len
要删除的内容的长度
【
7
】字符串替换
s.replace(pos,len,str);
//pos
是指要替换的起始位置
//len
是指要替换的字符串长度
//str
是指用于替换的字符串
【
8
】字符串取子串
s.substr(pos,len);
//pos
是指将要取出的子串的起始下标。
//len
是指将要取出的子串的长度
【
9
】字符串反转
//
没有
s.
而且需要头文件
algorithm
reverse(s.begin(),s.end())
;
//s.begin()
是指字符串开始的下标
//s.end()
是指字符串结束的下标的后一个
【9.5】将字符串中的一部分进行反转
reverse(s.begin()+st,s.end()-ed)
;
//st
与
ed
是指需要反转的位置距离起止位置的距离
【
10
】将一整个字符串进行从小到大排序(或者是说按照字典序进行排序)
sort(s.begin()s,end());
【
10.5
】将字符串中的一部分进行排序
sort(s.begin()+st,s,end()-ed); //st
与
ed
是指需要反转的位置距离起止位置的距离
二.vector
数据结构
大致分类:①集合结构、②线性结构、③树形结构、④图形结构
vector
一、vector
1.
含义:
vector
是
C++
标准库提供的
变长数组类型
,可以像数组一样进行数据存储和访问,但不需要
指定
vector
长度,会
根据需要自动扩展容量
; 内部存储方式与数组相同,是一段
连续的存储空间。
2.
特点:
1
、
vector
无需指定长度,在使用的时候会自动调整
2
、
可以像数组一样通过下标进行访问
(
也可以通过
迭代器
进行访问
)
3
、
vector
类似
string
,拥有很多函数,可以对
vector
进行快速操作
二、vector 使用 (基础函数)
1.
头文件:
#include <vector> using namespace std;
2.vector
定义:
①
vector<int> v;//
定义一个
vector
变量
v
,
v
是一个整型变长数组
(
向量容器
)
初始是空
②
vector<char> v1,v2;//
定义两个
vector
变量
char
类型变长数组相当于
string (
但没有
string
强大
)
③
vector<double> v3(v);//
定义一个
vector
变量
v3
并初始化为
v
④
vector<double> v3=v;//
定义一个
vector
变量
v3
并初始化为
v
⑤
vector<int> v4(10,1);//
定义一个
vector
变量
v4
初始化为
10
个
1
⑥
vector<int> v5(10);//
定义一个
vector
变量
v5
长度为
10 (
有
10
个元素, 元素初值都为
0)
⑦
vector<int> v[110];
//
定义一个
vector
数组
v v
中的每个元素
v[i]
都是一 个
vector
变量
(
类似字符串数
组
)
3.
添加元素
push_back()
格式:
v.push_back(t) ;
功能:在
v
的尾部添加新元素
t
(
v
是什么类型
t
就是什么类型)
举例:
4.
元素引用
(
下标从
0
开始
)
①引用方式
v[i] //
下标访问 使用
v
中下标为
i
的元素
v.front()
//
访问首元素
v.back()
//
访问尾元素
②举例
cout << v[4] << " ";//
输出下标为
4
的元素
v
中的第五个元素
cout << v.front() << " ";//
输出首元素 相当于
cout<<v[0];
cout << v.back() << " ";//
输出尾元素 相当于
cout<<v[v.size()-1];
5.
常用函数
①
pop_back()
格式:
v.pop_back() ;
功能:删除尾元素
(
多个删除可以用
erase)
举例:
v.pop_back
()
;//
删除
v
中的最后一个元素
②
size()
格式:
v.size() ;
功能:
计算当前
v
的长度
(
计算出
v
中当前有多少个元素
)
举例:
int len = v.size();//
计算当前
v
的长度并装到
len
中
v.size()
返回值为无符号整型
③
empty()
格式:
v.empty() ;
功能:判断当前的
v
是否为空,如果是空返回
true
,否则返回
false
举例:
if(v.empty()) cout << "empty";//
如果
v
为空 输出
empty
④
resize()
格式:
v.resize(t) ;
功能:将
v
的长度设置为
t
,不够的扩展,多的删除
举例:
v.resize(5);//
将
v
的长度设置为
5
⑤
clear()
格式:
v.clear() ;
功能:清空
vector
变量,清除
v
中所有元素
举例:
v.clear();//
清空当前
v
6.
迭代器
①
vector
迭代器定义
vector<int>::iterator iter
;//vector
对应的迭代器为 随机访问迭代器
迭代器
iter
:用于指向
vector
中元素的位置
(
注意:位置是地址不是下标
)
②迭代器的使用
v.begin()
;
//
返回指向
v
中
第一个元素
的迭代器
v.end()
;
//
返回指向
最后一个元素下一个位置
的迭代器
运用:
iter = v.begin();//
得到首元素的迭代器放到
iter
中
③使用迭代器访问元素
*iter
;//
访问当前
iter
指向的元素
运用:
iter = v.begin();//iter
是指向首元素
v[0]
的迭代器
cout<< *iter << " " << *(iter+1) ;//
相当于输出
v[0] v[1]
④注意事项
只有使用迭代器才能存储位置;即
v.begin()
返回值只能用迭代器
iter
来存储
注意
v.end()
返回的是尾元素的下一个位置的迭代器
三、vector 拓展常用函数
1.
插入函数
insert()
格式:
v.insert(iter,val) ;
功能:在迭代器
iter
所指向的元素前面插入数字
val
此时
iter
指向的元素和后面的所有元素后移一位
举例:
v.insert(v.begin()+1,5);//
在第
2
个元素
v[1]
前面插入数字
5
2.
删除函数
erase()
①删除一个元素
格式:
v.erase(iter) ;
功能:删除
iter
所指向位置的元素
②删除多个元素
格式
:
v.erase(iter1,iter2) ;
功能:
删除
[iter1,iter2)
之间的所有元素
,包含
iter1
指向的元素,不包含
iter2
指向的元素
举例:
v.erase(v.begin()+1,v.begin()+5);//
删除
v[1]~v[4]
之间的所有元 素 后面元素前移
3.vector
排序
sort()
格式:
sort(v.begin(),v.end(),cmp);
//
省略
cmp
默认从小到大排序
功能:
对
vector
变量
v
中所有元素按照
cmp
排序规则进行排序
举例:
sort(v.begin()+3,v.begin()+10);//
对
v[3]~v[9]
按照从小到大顺序 排序
注:所有可以用下标访问的容器都可以用
sort
进行排序
4.
迭代器使用
(
获得相应元素位置
)
通过
v.begin()
加上下标
i
,可以获 得对应元素
v[i]
的位置
(
如:
v.begin()+2
就是
v[2]
的位置
)
或者通过
v.end()
减去下标
i
,也可以获得相应元素的位置
(
或者说获得相应 元素的迭代器
)
四、vector 使用场合
1.
不确定数组大小
2.
需要进行删除,随时添加元素等操作时
,使用
vector
,利用相关函数可以快速实现
3.
根据数据范围,需要开辟的数组比较大,但实际运用不需要那么多,可以利用
vector
的动态特性,
用多少开辟多少
(
节省空间,降低空间复杂度
)