python vector_C++ vector使用方法

2023-05-16

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

C++ 中数组很坑,有没有类似 Python 中 list 的数据类型呢?类似的就是 vector!vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。和 string 对象一样,标准库将负责管理与存储元素相关的内存。我们把 vector 称为容器,是因为它可以包含其他对象。一个容器中的所有对象都必须是同一种类型的。

使用vector注意事项:

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

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

double Distance(vector<int>&a, vector<int>&b)

 其中的“&”绝对不能少!!!

vector对象的定义和初始化

同样的,使用前,导入头文件 #include 可以使用using声明:using std::vector;vector 是一个类模板(class template)。使用模板可以编写一个类定义或函数定义,而用于多个不同的数据类型。因此,我们可以定义保存 string 对象的 vector,或保存 int 值的 vector,又或是保存自定义的类类型对象(如 Sales_items 对象)的 vector。
声明从类模板产生的某种类型的对象,需要提供附加信息,信息的种类取决于模板。以 vector 为例,必须说明 vector 保存何种对象的类型,通过将类型放在类型放在类模板名称后面的尖括号中来指定类型:

vector v1;保存类型为 T 对象。默认构造函数 v1 为空。
vector v2(v1); v2 是 v1 的一个副本。
vector v3(n, i);v3 包含 n 个值为 i 的元素。
vector v4(n); v4 含有值初始化的元素的 n 个副本。

【注意:1、若要创建非空的 vector 对象,必须给出初始化元素的值;2、当把一个 vector 对象复制到另一个 vector 对象时,新复制的 vector 中每一个元素都初始化为原 vectors 中相应元素的副本。但这两个 vector 对象必须保存同一种元素类型;3、可以用元素个数和元素值对 vector 对象进行初始化。构造函数用元素个数来决定 vector 对象保存元素的
个数,元素值指定每个元素的初始值】

vector对象动态增长:

vector 对象(以及其他标准库容器对象)的重要属性就在于可以在运行时高效地添加元素。

注意:因为 vector 增长的效率高,在元素值已知的情况下,最好是动态地添加元素。

实例:

vectortest;//建立一个vector,int为数组元素的数据类型,test为动态数组名

简单的使用方法如下:

vectortest;//建立一个vector
test.push_back(1);
test.push_back(2);//把1和2压入vector,这样test[0]就是1,test[1]就是2

实例:

vector > points; //定义一个二维数组
points[0].size(); //指第一行的列数

1 、基本操作

(1)头文件#include.

(2)创建vector对象,vector vec;

(3)尾部插入数字:vec.push_back(a);

(4)使用下标访问元素,cout<

(5)使用迭代器访问元素.

vector::iterator it;for(it=vec.begin();it!=vec.end();it++)
cout<

(6)插入元素:vec.insert(vec.begin()+i,a); 在第i+1个元素前面插入a;

(7)删除元素:vec.erase(vec.begin()+2); 删除第3个元素

vec.erase(vec.begin()+i,vec.end()+j); 删除区间[ i,j-1] 区间从0开始

(8)向量大小: vec.size();

(9)清空: vec.clear();

特别提示:这里有 begin() 与 end() 函数、front() 与 back() 的差别

2、重要说明

vector 的元素不仅仅可以是 int,double,string 还可以是结构体,但是要注意:结构体要定义为全局的,否则会出错。

#include#include#include#includeusing namespace std;typedef struct rect{    int id;    int length;    int width;  //对于向量元素是结构体的,可在结构体内部定义比较函数,下面按照id,length,width升序排序。  bool operator< (const rect &a)  const      {        if(id!=a.id)            return id        else          {            if(length!=a.length)                return length            else                  return width        }    }}Rect;int main(){    vector vec;    Rect rect;    rect.id=1;    rect.length=2;    rect.width=3;    vec.push_back(rect);    vector::iterator it=vec.begin();    cout<' '<' '<endl;  return 0;}

3、算法

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

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

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

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

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

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

定义排序比较函数:

bool Comp(const int &a,const int &b)
{return a>b;
}

调用时: sort(vec.begin(),vec.end(),Comp),这样就降序排序。 

输出Vector的中的元素   

vector vecClass; 

int nSize = vecClass.size();   

 //打印 vecClass,方法一: 

for(int i=0;i{
cout<" ";
}
cout<

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

 //打印 vecClass,方法二:    

for(int i=0;i{
cout<" ";
}
cout<

//打印 vecClass,方法三:输出某一指定的数值时不方便

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

二维数组的使用:

#include "stdafx.h"  #include #include #include 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;}

9b48d22f1149237ef1b5f73f826447f0.png

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

python vector_C++ vector使用方法 的相关文章

随机推荐