gpt4 book ai didi

填充数组的c++函数

转载 作者:太空宇宙 更新时间:2023-11-04 15:43:47 26 4
gpt4 key购买 nike

我正在尝试做的事情:

用户输入两个数字。使用这些数字作为维度来声明数组。main() 之外的函数正在填充数组。在 main() 中访问数组以进行进一步的操作。

我遇到的问题:

函数+数组的组合好像没有我想象的那么好。

我做了什么:

void tablica1(int h, int w)
{
int m,n;

for(m=0; m<h; m++)
for(n=0; n<w; n++)
{
arr[h][w]=1;
}
}

发生了什么:

数组 arr 在 tablica1() 中不可访问,因为它尚未在该函数中声明。

当然,当我在 tablica1() 中声明数组时,它在 main() 中变得不可访问。

可能的解决方案:

  • 将 arr 作为引用传递给 tablica1() - 不知道该怎么做
  • tablica1() 中声明 arr 并以某种方式将其传递给 main() - 不知道该怎么做

其他可能的解决方案?

最佳答案

您可以在编译单元级别在两者之外声明数组:

int arr[10][10];

void func() {
for (int i=0; i<10; i++) {
for (int j=0; j<10; j++) {
arr[i][j] = i + j;
}
}
}

int main(int argc, const char *argv[]) {
func();
std::cout << arr[3][4] << "\n"; // Output will be 7
return 0;
}

如果你想处理一个动态大小的矩阵,最常见的模式是使用 std::vectorstd::vector(它更通用一些因此比二维矩阵效率低一点,因为每行可以有不同的长度,但在大多数情况下成本差异不是大问题)

#include <vector>

std::vector< std::vector< int > > arr;

void func() {
int height = arr.size();
int width = arr[0].size();
for (int i=0; i<height; i++) {
for (int j=0; j<width; j++) {
arr[i][j] = i + j;
}
}
}


int main() {
int height = 13;
int width = 7;

arr = std::vector< std::vector<int> >(height, std::vector<int>(width));

func();

...
}

关于填充数组的c++函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20029140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com