vector总结(带你学好vector)一

学习前,要复习字符串

一.字符串 

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 的动态特性,
用多少开辟多少 ( 节省空间,降低空间复杂度 )
  • 31
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值