2D array-waarden C++

Ik wilde een 2D-array declareren en er waarden aan toewijzen, zonder een for-lus uit te voeren.

Ik dacht dat ik het volgende idee kon gebruiken

int array[5] = {1,2,3,4,5};

Dat werkt ook prima om de 2D-array te initialiseren. Maar blijkbaar vindt mijn compiler dit niet leuk.

/*
 1   8  12  20  25
 5   9  13  24  26
*/
#include <iostream.h>
int main()
{
    int arr[2][5] = {0};   // This actually initializes everything to 0.
    arr [1] [] = {1,8,12,20,25}; // Line 11
    arr [2] [] = {5,9,13,24,26};
    return 0;
}

J:\CPP\Grid>bcc32.exe Grid.cpp

Borland C++ 5.5.1 voor Win32 Copyright (c) 1993, 2000 Borland

Grid.cpp:

Fout E2188 Grid.cpp 11: Expressiesyntaxis in functie main()

Fout E2188 Grid.cpp 12: Expressiesyntaxis in functie main()

Waarschuwing W8004 Grid.cpp 14: ‘arr’ krijgt een waarde toegewezen die nooit in funct wordt gebruikt
ion main()

* 2 fouten bij het compileren *

Help alstublieft met wat de juiste manier is om de 2D-array te initialiseren met mijn set waarden.


Antwoord 1, autoriteit 100%

Zoals dit:

int main()
{
    int arr[2][5] =
    {
        {1,8,12,20,25},
        {5,9,13,24,26}
    };
}

Dit zou in je C++-handboek moeten staan: welke gebruik je?

Hoe dan ook, overweeg het gebruik van std::vectorof een kant-en-klare matrixklasse, b.v. van Boost.


Antwoord 2, autoriteit 16%

De juiste manier om een multidimensionale array in C of C++ te initialiseren is

int arr[2][5] = {{1,8,12,20,25}, {5,9,13,24,26}};

Je kunt dezelfde truc gebruiken om zelfs hoger-dimensionale arrays te initialiseren als je wilt.

Wees ook voorzichtig in uw initiële code – u probeerde 1-geïndexeerde offsets in de array te gebruiken om deze te initialiseren. Dit compileerde niet, maar als het dat wel zou doen, zou het problemen veroorzaken omdat C-arrays 0-geïndexeerd zijn!


Antwoord 3, autoriteit 15%

Ik wil u er alleen op wijzen dat u niet alle afmetingen van de array hoeft op te geven.

De meest linkse dimensie kan worden ‘geraden’ door de compiler.

#include <stdio.h>
int main(void) {
  int arr[][5] = {{1,2,3,4,5}, {5,6,7,8,9}, {6,5,4,3,2}};
  printf("sizeof arr is %d bytes\n", (int)sizeof arr);
  printf("number of elements: %d\n", (int)(sizeof arr/sizeof arr[0]));
  return 0;
}

Antwoord 4, autoriteit 10%

int iArray[2][2] = {{1, 2}, {3, 4}};

Zie een 2D-array als een array van arrays.


Antwoord 5, autoriteit 2%

Een alternatief is om uw 2D-array weer te geven als een 1D-array. Dit kan elementgewijze bewerkingen efficiënter maken. Je zou het waarschijnlijk moeten inpakken in een klasse die ook breedte en hoogte zou bevatten.

Een ander alternatief is om een 2D-array weer te geven als een std::vector<std::vector<int> >. Hiermee kunt u de algoritmen van STL gebruiken voor arrayberekeningen, en de vector zorgt ook voor geheugenbeheer voor u.

Other episodes