4.(续)向量学习

代码人生 2023-09-13 09:51:48
110阅读

1、使用方法

1.1创建一维vector

矢量整数; //不指定长度

向量intnums(n); //指定长度为n

添加元素

nums.push_back(1);//直接从数组末尾添加

nums[i]=1;//直接赋值给第i个位置

删除元素

nums.resize(nums.size-i); //直接减少数组长度,以某种方式删除最后一个i

nums.pop_back();//删除最后一个元素

数组遍历

for(int i=0; i nums.size(); i++) coutnums[i]endl;

获取长度

nums.size()

种类

排序(nums.begin(),nums.end());

翻动

反向(nums.begin(), nums.end());

合并两个向量

合并nums1 和nums2 并将合并后的数组赋给nums

向量intnums1(m),nums2(n);

矢量整数;

nums.resize(m+n);

合并(nums1.begin(),nums1.end(),nums2.begin(),nums2.end(),nums);

1.2创建二维vector

访问二维向量的元素: 如果指定外向量和内向量的大小,可以使用operator[]进行读写;如果只指定外层向量的大小,可以使用push_back()函数进行写入,但不能使用operator[ ]进行读写。

1)。创建m*n二维向量:

向量向量int nums(m,向量int(n)); //m*n二维向量

定义一个向量容器,元素类型为向量,初始化为包含m个向量对象,每个对象都是新创建的向量对象的副本,并且这个新创建的向量对象被初始化为包含n个零。

vector(n) 表示构造一个包含n 个零的未命名向量对象。

2)。动态创建m*n的二维向量

方法一

向量向量int nums;

nums.resize(m);

for(int i=0;im;i++) nums[i].resize(n);

方法二

向量向量int nums;

nums.resize(m,vectorint(n));

3).初始化二维数组

向量向量`int` nums(m,向量`int`(n,0)); //m*n个二维向量,所有元素均为0

获取二维数组的行数:nums.size();

获取二维数组的列数:nums[0].size()

4)数组遍历

int m=nums.size(),n=nums[0].size();

for(int i=0; i m; i++){

for(int j=0; j n; j++){

coutnums[i][j]endl;

}

}

2、vectorint指针形式比较

使用STL容器(如map、list、vector等)时,应该放对象还是对象指针?

也就是说,无论是使用vector还是vectorint*,这里的vector可以替换为其他容器,int可以替换为其他基本类型,或者定制的数据结构或类。

1)。 Vector不需要动态操作内存,无需担心内存泄漏等问题; vectorint*要注意new和delete成对使用。

2)。当int改为其他类型或结构体或类时,使用vectorint*更为方便。容器中的内容占用的内存也相对较少。使用指针时,申请空间,而不是申请空间,即占用4个字节的地址。

3)。当需要对变量进行连续的读写操作时,最好使用指针。只需传递指针即可加快访问速度。

矢量整数

向量int vecTemp;

for (int i=0; i 10; i++)

{

vecTemp.push_back(i);//该方法不需要动态new内存,当然也不需要delete。

}向量int*

向量int* vecTemp;

for (int i=0; i 10; i++)

{

int* nTemp=新int;

*n温度=我;

vecTemp.push_back(nTemp);

}向量int *a;

使用这种向量指针时,指针a代表:不能通过a[i]访问该值,只能通过a-at(i)访问该值。

the end
免责声明:本文不代表本站的观点和立场,如有侵权请联系本站删除!本站仅提供信息存储空间服务。