我想做的事情:
用户输入两个数字。
使用这些数字作为维度声明数组。
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()
中无法访问。
可能的解决方案:
tablica1()
作为参考 - 不知道该怎么做tablica1()
中声明arr并以某种方式将其传递给main()
- 不知道该怎么做其他可能的解决方案?
答案 0 :(得分:5)
您可以在编译单元级别声明数组以外的数组:
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::vector
std::vector
s(它更通用,因此比2d矩阵效率稍低,因为每个行可以有不同的长度,但在大多数情况下,成本差异不是一个大问题)
#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();
...
}
答案 1 :(得分:1)
你提到的两个解决方案
1,将arr传递给tablica1()作为参考
void tablica1(int h, int w,int **arr)
{
int m,n;
for(m=0; m<h; m++)
for(n=0; n<w; n++)
{
arr[h][w]=1;
}
}
void main()
{
const int h=100,w=100;
int arr[h][w];
tablica1(h,w,arr);
}
2,在tablica1()中声明arr并以某种方式将其传递给main()
int **tablica1(int h, int w)
{
int m,n;
int **arr=new int*[h];
for(int i=0;i<h;i++)
{
arr[i]=new int[w];
}
//it is best to initialize arr by setting each element 0
for(m=0; m<h; m++)
for(n=0; n<w; n++)
{
arr[h][w]=1;
}
return arr;
}
void main()
{
const int h=100,w=100;
int **arr=tablica1(h,w);
//do somting
//delete arr
for(int i=0;i<h;i++)
{
delete []arr[i];
}
delete []arr;
}
答案 2 :(得分:0)
如果你想声明一个动态的多维数组,你可以使用下面的模板给出。
#include<iostream.
#include <vector>
using namespace std;
typedef vector<int> vi;
vector<vi> arr; // arr is a dynamic two dimensional array.
vi.assign(10,vi());//10 rows of type vi .
如果你想在arr中输入值,你可以通过
来输入 vi[0].push_back(a);
vi[0].push_back(b); // a,b,c are some example values..
vi[1].push_back(c);
答案 3 :(得分:0)
您可以使用此代码了解
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
typedef vector <int> vi;
vector<vi> arr;// dynamic multidimensional array
int main(){
cout<<"enter array size\n";
int h,w,temp;;
cin>>h>>w;
arr.assign(h,vi());
int i, j;
for(i=0; i < h ;i++)
for(j=0; j < w; j++)
{
cin>>temp;
arr[i].push_back(temp);
}
// for printing
for(i=0; i < h ;i++){
for(j=0; j < w; j++)
{
cout<<arr[i][j]<<" ";
}
cout<<endl;
}
return 0;
}