【c/c++】二维数组(vector构建及传参方式)

1.基本方式构造的二维数组(提前分配内存)

传参方式:

方法一, 形参给出第二维的长度。

#include <stdio.h>
void func(int n, char str[ ][5] )
{
 int i;
 for(i = 0; i < n; i++)
 printf("/nstr[%d] = %s/n", i, str[i]);
}

void main()
{
 char* p[3];
 char str[][5] = {"abc","def","ghi"};
 func(3, str);
}

方法二,形参声明为指向数组的指针。(推荐)

#include <stdio.h>
void func(int n, char (*str)[5] ){
 int i;
 for(i = 0; i < n; i++)
 printf("/nstr[%d] = %s/n", i, str[i]);
}

void main()
{
 char* p[3];
 char str[][5] = {"abc","def","ghi"};
 func(3, str);
}

用基本的方法构造二维数组,需要提前确定其大小。虽然有动态分配的方式,但是可能会有分配不连续的问题,因此如果要动态分配的话还是用vector。

2.采用vector构造二维数组

使用方式:

//用vector来代替数组
#include<iostream>
#include<vector>
using namespace std;
void main()
{
	vector<vector<int> >array(3);//二维数组包含3个向量
	for(int i = 0; i <3; i++)
		array[i].resize(3);//设置数组的大小3X3
 
	//现在你可以和使用数组一样使用这个vector
	for (int i = 0; i <3; i++)
		for (int j = 0; j <3; j++)
			array[i][j] = (i*j);
	//输出
	for (int i = 0; i <3; i++)
	{
		for (int j = 0; j <3; j++)
			cout<<array[i][j] << "   ";
		cout<<endl;
	}
	cout << "------------" << endl;
	array.resize(5);//二维数组包含5个向量
	array[3].resize(3);//第4个向量包含3个元素
	array[4].resize(3);//第5个向量包含3个元素
	//现在是5X3的数组了
	for (int i = 0; i <5; i++)
		for (int j = 0; j <3; j++)
			array[i][j] = (i*j);
	for (int i = 0; i <5; i++)
	{
		for (int j = 0; j <3; j++)
			cout <<array[i][j] << "   ";
		cout <<endl;
	}
}

传参方式:

c++中常用的vector容器作为参数时,有三种传参方式,分别如下(为说明问题,用二维vector):

  • function1(vector<vector<int> >  vec),传值
  • function2(vector<vector<int> > & vec),传引用
  • function3(vector<vector<int> > * vec),传指针

注意,三种方式分别有对应的const形式,不在此讨论。

三种方式对应的调用形式分别为:

  • function1(vec),传入值
  • function2(vec),传入引用
  • function3(&vec),传入地址

三种方式的效果分别为:

  • 会发生拷贝构造
  • 不会发生拷贝构造
  • 不会发生拷贝构造
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半山乱步

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值