STL中vector的使用

作用:它能够像容器一样存放各种类型的对象,简单地说,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 
 

猜你喜欢

转载自blog.csdn.net/usstmiracle/article/details/85261041