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; }

声明:本文为原创,作者为 对弈,转载时请保留本声明及附带文章链接:http://www.duiyi.xyz/vector%e5%9f%ba%e6%9c%ac%e4%bd%bf%e7%94%a8/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 阶段01Java基础day26反射

    声明:本文为原创,作者为 对弈,转载时请保留本声明及附带文章链接:http://www.duiyi.xyz/c%e5%ae%9e%e7%8e%b0%e9%9b%...

    对弈
  • linux基本命令

    div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget...

    对弈
  • 流星雨

    声明:本文为原创,作者为 对弈,转载时请保留本声明及附带文章链接:http://www.duiyi.xyz/c%e5%ae%9e%e7%8e%b0%e9%9b%...

    对弈
  • 【GAMES101-现代计算机图形学课程笔记】Lecture 02 Review of Linear Algebra

    矩阵在图形学里常用于表示变换(Transformations),比如 translation,rotation,shear,scale等。

    marsggbo
  • 模式识别与机器学习(二)

    类内距离准则: 设有待分类的模式集{\(\vec{x_1},\vec x_2,...,\vec x_N\)}在某种相似性测度基础上被划分为\(C\)类,{\...

    范中豪
  • 模式识别与机器学习(一)

    模式: 为了能够让机器执行和完成识别任务,必须对分类识别对象进行科学的抽象,建立它的数学模型,用以描述和代替识别对象,这种对象的描述即为模式。

    范中豪
  • vector

    青木
  • SQL注入实战(二)

    https://hack.zkaq.cn/battle/target?id=31ac789a52edf9bb

    木尤
  • 秒杀安全

    简介 我们通常衡量一个Web系统的吞吐率的指标是QPS(Query Per Second,每秒处理请求数),解决每秒数万次的高并发场景,这个指标非常关键。举...

    架构师小秘圈
  • Scala JDBC 查询和更新MySQL

    大数据工程师-公子

扫码关注云+社区

领取腾讯云代金券