STL中vector的使用

2023-05-16

 

作用:它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。

vector在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。


特别注意:

使用vector需要注意以下几点:

1、如果你要表示的向量长度较长(需要为向量内部保存很多数),容易导致内存泄漏,而且效率会很低;

2、Vector作为函数的参数或者返回值时,需要注意它的写法:

   double Distance(vector<int>&a, vector<int>&b) 其中的“&”绝对不能少!!!
原文:https://blog.csdn.net/duan19920101/article/details/50617190 
vector中可以存基本类型,也可以存储类对象,数组等。

代码实现:

 vector<int> vec;
    for(int i=0;i<10;i++)
   {
       vec.push_back(i);
   }

   vec.insert(vec.begin()+1,5);//在下标为1的位置插入5,其余元素向后移动

   vector<int>::iterator it;
   for(it = vec.begin();it != vec.end();it++)//使用迭代器输出
   {
       cout<<*it;
   }
    cout<<endl;
   vec.erase(vec.begin()+1);
    for(it = vec.begin();it != vec.end();it++)
   {
       cout<<*it;
   }
    cout<<endl;
   reverse(vec.begin(),vec.end());
    for(it = vec.begin();it != vec.end();it++)
   {
       cout<<*it;
   }
    cout<<endl;
    for(int i=0;i<vec.size();i++)//使用循环输出
   {
       cout<<vec[i];
   }

在vector中reverse(vec.begin(),vec.end());可以全部翻转,也可以局部翻转

reverse(vec.begin()+2,vec.end()-3);//只要注意使用范围就可以。

 

 

定义一个二维动态数组u,实现乘法口诀。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{

    int arr[10][10]={0};
    for(int i=1;i<10;i++)
    {
        for(int j=1;j<10;j++)
        {
            arr[i][j]=i*j;
            if(i>=j)
            cout<<i<<"*"<<j<<"="<<arr[i][j]<<"  ";
        }
        cout<<endl;
    }


    vector<vector <int> > array(10,vector<int>(0));//vector的二维数组
    for(int i=1;i<10;i++)
    {
        for(int j=0;j<9;j++)
        {
            array[i].push_back(i*j);
        }
    }

    for(int i=1;i<array[i].size();i++)
    {
        for(int j=1;j<array[j].size();j++)
        {
            cout<<array[i][j]<<"  ";

        }
        cout<<endl;
    }

    cout<<"-------------------";
    for(int i=0;i<10;i++)
    {
        for(int j=1;j<=9;j++)
        {
            if(i>=j)
        {
            cout<<i<<"*"<<j<<"="<<array[i][j]<<"   ";
        }

    
        cout<<endl;
    }
    cin.get();
    system("Pause");
    return 0;
    cout << "Hello world!" << endl;
    return 0;
}


输出结果:

1*1=1
2*1=2  2*2=4
3*1=3  3*2=6  3*3=9
4*1=4  4*2=8  4*3=12  4*4=16
5*1=5  5*2=10  5*3=15  5*4=20  5*5=25
6*1=6  6*2=12  6*3=18  6*4=24  6*5=30  6*6=36
7*1=7  7*2=14  7*3=21  7*4=28  7*5=35  7*6=42  7*7=49
8*1=8  8*2=16  8*3=24  8*4=32  8*5=40  8*6=48  8*7=56  8*8=64
9*1=9  9*2=18  9*3=27  9*4=36  9*5=45  9*6=54  9*7=63  9*8=72  9*9=81
1  2  3  4  5  6  7  8
2  4  6  8  10  12  14  16
3  6  9  12  15  18  21  24
4  8  12  16  20  24  28  32
5  10  15  20  25  30  35  40
6  12  18  24  30  36  42  48
7  14  21  28  35  42  49  56
8  16  24  32  40  48  56  64
-------------------
1*1=1
2*1=2   2*2=4
3*1=3   3*2=6   3*3=9
4*1=4   4*2=8   4*3=12   4*4=16
5*1=5   5*2=10   5*3=15   5*4=20   5*5=25
6*1=6   6*2=12   6*3=18   6*4=24   6*5=30   6*6=36
7*1=7   7*2=14   7*3=21   7*4=28   7*5=35   7*6=42   7*7=49
8*1=8   8*2=16   8*3=24   8*4=32   8*5=40   8*6=48   8*7=56   8*8=64
9*1=9   9*2=18   9*3=27   9*4=36   9*5=45   9*6=54   9*7=63   9*8=72   9*9=0

 

 

#include <iostream>
#include <vector>
using namespace std;
int main()
{
	vector<char> v1;
	vector<char>::iterator iter1;
	vector<char>::iterator iter2;
	v1.push_back('m');
	v1.push_back('n');
	v1.push_back('o');
	v1.push_back('p');
 
	cout << "v1.front() = " << v1.front() << endl;
	cout << "v1.back() = " << v1.back() << endl;
 
	iter1 = v1.begin();
	cout << *iter1 << endl;
	iter2 = v1.end()-1; //注意v1.end()指向的是最后一个元素的下一个位置,所以访问最后一个元素
                        //的正确操作为:v1.end() - 1;
	cout << *iter2 << endl;
	return 0;
}

(1) 使用reverse将元素翻转:需要头文件#include<algorithm>

reverse(vec.begin(),vec.end());将元素翻转,即逆序排列!

(在vector中,如果一个函数中需要两个迭代器,一般后一个都不包含)

(2)使用sort排序:需要头文件#include<algorithm>,

sort(vec.begin(),vec.end());(默认是按升序排列,即从小到大).

可以通过重写排序比较函数按照降序比较,如下:

定义排序比较函数:

bool Comp(const int &a,const int &b)
{
    return a>b;
}
调用时:sort(vec.begin(),vec.end(),Comp),这样就降序排序。 

 

输出Vector的中的元素   

vector<float> vecClass; 

int nSize = vecClass.size();   

 //打印vecClass,方法一:  

for(int i=0;i<nSize;i++)  
{  
   cout<<vecClass[i]<<"     ";  
}  
   cout<<endl; 

需要注意的是:以方法一进行输出时,数组的下表必须保证是整数。
 //打印vecClass,方法二:     

for(int i=0;i<nSize;i++)  
{  
   cout<<vecClass.at(i)<<"     ";  
}  
   cout<<endl;  
//打印vecClass,方法三:输出某一指定的数值时不方便

for(vector<float>::iterator it = vecClass.begin();it!=vecClass.end();it++)  
{  
    cout<<*it<<"   ";  
}  
    cout<<endl;  

二维数组的使用:

#include "stdafx.h"
#include <cv.h>
#include <vector> 
#include <iostream> 
using namespace std;
int main()
{
    using namespace std;
    int out[3][2] = { 1, 2,  3, 4,5, 6 };
    vector <int*> v1;
    v1.push_back(out[0]);
    v1.push_back(out[1]);
    v1.push_back(out[2]);
 
    cout << v1[0][0] << endl;//1
    cout << v1[0][1] << endl;//2
    cout << v1[1][0] << endl;//3
    cout << v1[1][1] << endl;//4
    cout << v1[2][0] << endl;//5
    cout << v1[2][1] << endl;//6
 
    return 0;
}


vector中insert()的用法详解:http://blog.csdn.net/duan19920101/article/details/51557854

原文:https://blog.csdn.net/duan19920101/article/details/50617190 
 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STL中vector的使用 的相关文章

随机推荐

  • 什么情况下需要建立索引? 索引的作用?为什么能够提高查询速度?(索引的原理) 索引有什么副作用吗?

    https www cnblogs com Berryxiong p 6249427 html 为什么能够提高查询速度 xff1f 索引就是通过事先排好序 xff0c 从而在查找时可以应用二分查找等高效率的算法 一般的顺序查找 xff0c
  • 100w测试数据,为什么加了索引查询反而变慢了?

    建表 xff1a create table tb test fval varchar 50 插入测试数据 xff1a DELIMITER CREATE DEFINER 61 96 root 96 64 96 localhost 96 PRO
  • linux环境下使用gdb调试c和c++ 学习笔记

    第二十三课 xff1a GDB简介 哔哩哔哩 bilibili gdb调试 xff1a 1 gcc a c b c c c o app g g 编译器会保留函数名和变量名 2 启动gdb gdb 可执行程序的名字 xff08 gdb app
  • ubuntu下eth0网卡信息不见了

    ubuntu终端下命令ifconfig的问题解决 问题一 ifconfig之后只显示lo 没有看到eth0 问题二 ifconfig之后显示eth0 xff0c 但是没有显示静态IP地址 xff0c 即无inet 地址 广播 掩码 问题三
  • 计算机指令

    指令系统的设计原则包括 xff1a 完备性 xff1a 该有的都要有 有效性 xff1a 简洁 加速常用操作 没有歧义 规整性 xff1a 对称 均匀 一致 xff08 简单源于规整 xff09 兼容性 xff1a 之前 之后的都能用 下面
  • shell基础学习笔记1

    shell是什么 xff1f shell是一个命令解释器 xff0c 他为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序 xff0c 用户可以用shell来启动 挂起 停止甚至编写一些程序 其实就是输入命令的那个交互界面
  • linux达人养成学习笔记1

    2 4 分区之分区设备文件名与挂载 1 swap分区 xff0c 没有挂载点 xff0c 是文件系统类型 xff08 交换分区 xff0c 电脑内存 lt 4G xff0c 可分为内存2倍 xff1b gt 4G分同等大小 xff09 2
  • shell编程之变量学习小结

    在Bash中 xff0c 变量的默认类型都是字符串型 变量的分类 1 用户自定义变量 xff1a 变量可以自定义 xff0c 但是对系统生效的环境变量名和变量作用是固定的 2 环境变量 xff1a 这种变量中主要保存的是和系统操作环境相关的
  • 程序员的自我修养

    1 Provide Options Don 39 t make lame Excuses 提供各种选择 xff0c 不要找蹩脚的借口 2 Don 39 t live with Broken Windows 不要容忍破窗户 3 Be a ca
  • 二阶三阶四阶魔方旋转公式

  • 什么是回调函数?

    为了弄明白这种函数的奥妙 xff0c 首先提出三个问题 xff1a 1 回调函数是什么东西 xff1f 2 回调函数怎么开发 xff0c 怎么使用 xff1f 3 回调函数的作用 xff0c 应该在什么情况下使用 xff1f 带着问题来学习
  • Toastmasters会议小结

    第四战队第二次会议记录 舰队分享 P1 Ice Breaker Speech 分享人 xff1a 邱爱珍 爱珍结合自己的P1演讲经验 xff0c 从以下五个方面给出相应的意见 Book time to start 尽早在系统中预约自己的第一
  • 如何做好自己的时间管理

    认识时间障碍掌握时间管理的原则掌握各种有效管理隔个人时间的工具 没有目标谈什么时间管理 xff1f xff1f xff1f 今天需要完成的事情 这个周需要完成的事情 这个月需要完成的事情 时间管理的错误观念 时间管理只是常识 xff0c 只
  • 参考别人的面试总结:linux C/C++服务器后台开发面试题总结

    参考别人的面试总结 xff1a linux C C 43 43 服务器后台开发面试题总结 参考博客 xff1a http www cnblogs com nancymake p 6516933 html 基础语言知识方面 xff1a 1 使
  • 常用Git命令

    查看文件当前状态 xff1a git status 查看文件提交信息 xff1a git log 将未被追踪的文件 xff08 工作区 xff09 提交至暂存区 xff1a git add 文件名 所有修改的文件提交至暂存区 xff1a g
  • 直接插入排序算法实现学习

    include lt iostream gt using namespace std void show int a int n for int i 61 0 i lt n i 43 43 cout lt lt a i lt lt 34 t
  • 基本的排序算法C++实现(插入排序,选择排序,冒泡排序,归并排序,快速排序,最大堆排序,希尔排序)

    动图演示 xff1a https www cnblogs com onepixel articles 7674659 html 冒泡排序 include lt bits stdc 43 43 h gt 偷懒的写法 xff0c 不过编译时间比
  • 二分查找法和使用二分法查找的注意事项

    使用二分法查找的必要条件 xff1a 1 数组有序 2 注意数据类型是有范围的 xff0c 不要溢出 3 采用L 43 R L 2表达式更合适 4 注意 xff1a start 61 mid 43 1 和 end 61 mid 1 防止死循
  • 使用程序写出求出1!+2!+...+64!的运算结果。考虑溢出的问题

    求10的阶乘的和 int n 61 10 int num1 61 1 int num2 61 1 for int i 61 1 i lt 61 n i 43 43 num1 61 1 for int j 61 2 j lt 61 i j 4
  • STL中vector的使用

    作用 xff1a 它能够像容器一样存放各种类型的对象 xff0c 简单地说 xff0c vector是一个能够存放任意类型的动态数组 xff0c 能够增加和压缩数据 vector在C 43 43 标准模板库中的部分内容 xff0c 它是一个