简体   繁体   中英

Multidimensional arrays c++

i'm a complete beginner to programming and I started with C++. I'm on arrays now and i'm trying to create a simple ten times table. I succeeded with the following code but i's sceptical i did the right thing since there are no square brackets:

#include <iostream>
using namespace std;

int main() {

    int product;

    for(int i = 1; i < 11; ++i) {
        for(int j = 1; j < 11; ++j) {
            product = i*j;
            cout << product << "\t" << flush;
        }
        cout << endl;
    }

    return 0;
}

After messing about a bit i came up with the following:

#include <iostream>
using namespace std;

int main() {

    int row = 11;
    int col = 11;
    int table[row][col];

    for(row = 1; row < 11; ++row) {
        for(col = 1; col < 11; ++col) {
            table[row][col] = row*col;
            cout << table[row][col] << "\t" << flush;
        }
        cout << endl;
    }


    return 0;
}

Both give the desired output, my question is why? I'm also curious to know if the first really is an array, if not what is it? Any advice on my basic code writing will also be greatly appreciated.

The first example does not use an array. You are printing out the 10x tables but you are not storing that information in the program. This means that after the loop, the program will not remember what the table looks like.

In the second example the variable table is the multidimensional array. After the look you could call cout << table[4][6] << endl; for example, and 24 would be printed, without re-computing what 4*6 is. This is because you saved the information in the multidimensional array.

(also as the comments mentioned, arrays in programming start at 0, meaning that ideally you should makes your loops for(row = 0; row <= 10; ++row) { . This way the first slot in the array is not being wasted.

Also as the comments are mentioning, 'vectors' are nice but if you are learning programming, you should understand how an array works, and I would suggest not getting into vectors until you understand the basics of an array)

Both give the desired output, my question is why?

Because in both cases you print the same value.

In first case, you save the value in a variable

 product = i*j;

and print the variable

 cout << product << "\t" << flush;

In second case, you save the same value ( row has the same value as i , col has the same value as j ; so row * col has the same value as i * j ) in a variable

table[row][col] = row*col;

(this time is a variable inside an array of array, that depends from row and col ) and you print the same variable

cout << table[row][col] << "\t" << flush;

I'm also curious to know if the first really is an array, if not what is it?

Do you mean product ?

No: product is a simple integer variable.

A variable that change value at every iteration of product = i*j;

It's the table variable in the second example that is an array; or better, an array of arrays.

The difference is that at the end of the double for, product maintain only the value of the last calculated product when table maintain all the calculated product.

Any advice on my basic code writing will also be greatly appreciated.

First of all, as explained from Some programmer dude, the code

int row = 11;
int col = 11;
int table[row][col];

isn't correct C++ because you can't use non constant values for array dimensions.

You can use directly 11

int table[11][11];

or you can define row and col as constants

int const row = 11;
int const col = 11;
int table[row][col];

or better (starting from C++11) as constexpr constants

constexpr int row { 11 };
constexpr int col { 11 };
int table[row][col];

Second: IMHO it's better avoid (when possible) using namespace std; but explicating the namespace; so

std::cout << table[row][col] << "\t" << std::flush;

This avoid risks of name collisions when you use other libraries.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM