vector方法和使用

/*在一边摸索中一边学习了STL,这里介绍一些vector的基本用法。*/

#include<iostream>

#include<vector>//向量头文件
#include<algorithm>//算法,提供一下函数
using std::cin;
using std::cout;
using std::endl;
using std::vector;//vector在std的命名空间
bool compare(int a, int b);
int main()
{
//1.赋值方式:
vector<int>vec = { 1, 2, 3, 4, 5 };//赋初始值为1,2,3,4,5
vector<int>vec1({ 5, 4, 3, 2, 1 });
vector<int>vec2(vec1);//相当于:vector<int>vec2=vec1;
vector<int>vec3(10, 2);//构造大小为10的容器 全部初始化为2
vector<int>vec4(10);//构造大小为10的容器 不初始化


vec.push_back(6);//从后面插入一个数
for(int i = 0; i < 10; i++)
{ // 会重新申请内存,内存重新申请原则   每次多申请一半   //0  1  2  3  4  6  9 13  19  28    42 63 94
vec1.push_back(i+6);
}




//2.访问:
cout << vec[2] << endl;//3   直接通过下标访问
cout << vec[0] + 2 << endl;//3   通过偏移量的方式访问


 

//3.迭代器:

//3.1.遍历
vector<int>::iterator it;//定义迭代器变量it
//for (vector<int>::iterator it = vec.begin(); it != vec.end(); it++)
for (it = vec.begin(); it != vec.end(); it++)
{
cout << *it;//12345
}
cout << endl;


for (auto i = vec1.begin(); i != vec1.end(); i++)//也可以用auto自动识别类型,begin()返回第一个元素的迭代器,end() 返回的最后一个元素后面位置的迭代器 (超尾迭代器)
{
cout << *i;//54321
}
cout << endl;
for (auto s:vec3)//C11的新用法
{
cout << s;//2222222222
}
cout << endl;
//vector<int>reverse_iterator ;//反向迭代器类型
for (auto it2 = vec2.rbegin(); it2 != vec2.rend(); it2++)//反向迭代器
{ //rbegin  指向最后一个元素的位置     返回的是反向迭代器 
//rend()指向最开始元素的前面那个位置   ++是从后向前
cout << *it2 ;//12345
}
cout << endl;


//4.插入:
vec.insert(vec.begin(), 6);//在begin()位置插入(6),612345
vec1.insert(vec1.begin(),5,6);//在begin()位置插入10个(6),6666654321
vec2.insert(vec2.begin()+2, vec2.begin()+3,vec2.end());//在begin()+2(第二个位置之后)插入区间vec2.begin()+3到vec2.end()数据,5421321
// warning,区间最好不要是vec2内部的区间,有些版本的VS或者编译器可能出错


//5.删除:
vec.erase(vec.begin());//删除指定第一个元素
vec.erase(vec1.begin()+2,vec1.end());//删除区间元素
vec.clear();//删除全部元素,相当于:vec.erase(vec.begin(),vec.end());


//6.at函数:
vec.at(3);//*(vec.begin()+3)   //会检查是否越界 越界会引发异常


//7.排序:
sort(vec.begin(), vec.end());//没第三个参数默认升序排序,内部其实是使用快排的方法,时间复杂度为n*log2(n),执行效率较高!


    sort(vec.begin(), vec.end(), compare);//从大到小排序,加上compare,在这里就不需要对compare函数传入参数了,这是规则
stable_sort(vec.begin(), vec.end());
//这个函数和sort的用法一样,而和sort的区别是,带有stable的函数可保证相等元素的原本相对次序在排序后保持不变。或许你会问,既然相等,你还管他相对位置呢,也分不清 楚谁是谁了?这里需要弄清楚一个问题,这里的相等,是指你提供的函数表示两个元素相等,并不一定是一摸一样的元素。


//8.反转:
reverse(vec.begin(), vec.end());//反转   12345-->54321
reverse(vec.rbegin(), vec.rend()); 


//9.size函数:
vec.size();//返回当前容器的大小


//10.capacity函数:
vec.capacity();//返回当前容器的容量,即元素个数


//11.resize函数:
vec.resize(10);//为向量指定一个新容量


//12.交换
swap(vec, vec1);//交换两个向量的元素


cin.get();
return 0;
}
bool compare(int a, int b)//实现sort函数从大到小排序第三个参数的函数实现
{
return a > b;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淮城一只猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值