Arrays

Odhadovaná doba čtení: 3 min

Pole se používají k ukládání více hodnot do jedné proměnné, namísto deklarování samostatných proměnných pro každou hodnotu. Chcete-li deklarovat pole, definujte typ proměnné, zadejte název pole následovaný hranatými závorkami a zadejte počet prvků, které má uložit:

string cars[4];

Nyní jsme deklarovali proměnnou, která obsahuje pole ze čtyř řetězců. Chcete-li do něj vložit hodnoty, můžeme použít literal pole – umístěte hodnoty do seznamu odděleného čárkami do složených závorek:

string cars[4] = {"Škoda", "BMW", "Ford", "Mazda"};

K prvku pole se dostanete odkazem na číslo indexu v hranatých závorkách [].

string cars[4] = {"Škoda", "BMW", "Ford", "Mazda"};
cout << cars[0];
// Výstupy Škoda

Chcete-li změnit hodnotu konkrétního prvku, podívejte se na číslo indexu:

string cars[4] = {"Škoda", "BMW", "Ford", "Mazda"};
cars[0] = "Opel";
cout << cars[0];
// Nyní vyrábí Opel místo Škoda

Pomocí smyčky můžete procházet prvky pole for .

string cars[5] = {"Škoda", "BMW", "Ford", "Mazda", "Volvo"};
for (int i = 0; i < 5; i++) {
  cout << cars[i] << "\n";
}

Tento příklad vypíše index každého prvku spolu s jeho hodnotou:

string cars[5] = {"Škoda", "BMW", "Ford", "Mazda", "Volvo"};
for (int i = 0; i < 5; i++) {
  cout << i << " = " << cars[i] << "\n";
}

Existuje také smyčka „ for-each “ , která se používá výhradně k procházení prvků v poli:

for (type variableName : arrayName) {
  // blok kódu, který se má provést
}

int myNumbers[5] = {10, 20, 30, 40, 50};
for (int i : myNumbers) {
  cout << i << "\n";
}

Kompilátor je dostatečně chytrý, aby určil velikost pole na základě počtu vložených hodnot, proto je možné některé vynechat:

string cars[] = {"Volvo", "BMW", "Ford"}; // Tři prvky pole
string cars[3] = {"Volvo", "BMW", "Ford"}; // Také tři prvky pole. Tento přístup je však považován za nejlepší, 
//protože sníží pravděpodobnost chyb ve vašem programu.

Chcete-li získat velikost pole, můžete použít sizeof() operátor:

Proč se ve výsledku zobrazilo 20 místo 5, když pole obsahuje 5 prvků?

Je to proto, že sizeof()operátor vrací velikost typu v bajtech .

int typ má obvykle 4 bajty, takže z příkladu výše 4 x 5 (4 bajty x 5 prvků) = 20 bajtů .

Chcete-li zjistit, kolik prvků má pole , musíte vydělit velikost pole velikostí datového typu, které obsahuje:

int myNumbers[5] = {10, 20, 30, 40, 50};
cout << sizeof(myNumbers);

Pole v podmínce smyčky ( i < 5). Není ideální, protože to bude fungovat pouze pro pole zadané velikosti.

Použitím sizeof()přístupu z výše uvedeného příkladu však nyní můžeme vytvořit smyčky, které fungují pro pole libovolné velikosti, což je udržitelnější.

int myNumbers[5] = {10, 20, 30, 40, 50};
for (int i = 0; i < sizeof(myNumbers) / sizeof(int); i++) {
  cout << myNumbers[i] << "\n";
}

Chcete-li deklarovat vícerozměrné pole, definujte typ proměnné, zadejte název pole následovaný hranatými závorkami, které určují, kolik prvků má hlavní pole, a další sadou hranatých závorek, která označuje, kolik prvků má dílčí pole. :

string letters[2][4];

string letters[2][4] = {
  { "A", "B", "C", "D" },
  { "E", "F", "G", "H" }
};

Každá sada hranatých závorek v deklaraci pole přidává do pole další rozměr . Pole, jako je výše uvedené, má dva rozměry. Pole mohou mít libovolný počet rozměrů. Čím více rozměrů má pole, tím složitější je kód.

Chcete-li získat přístup k prvku vícerozměrného pole, zadejte číslo indexu v každém z rozměrů pole. Tento příkaz přistupuje k hodnotě prvku v prvním řádku (0) a třetím sloupci (2) pole písmen 

→   0   1   2   3   4

0

1

string letters[2][4] = {
  { "A", "B", "C", "D" },
  { "E", "F", "G", "H" }
};

cout << letters[0][2];  // Výstupem "C"

Chcete-li změnit hodnotu prvku, podívejte se na indexové číslo prvku v každé z dimenzí:

string letters[2][4] = {
  { "A", "B", "C", "D" },
  { "E", "F", "G", "H" }
};
letters[0][0] = "Z";

cout << letters[0][0];  // Nyní výstupy "Z" namísto "A"
// Vložili jsme "1" na znamení, že existuje loď.
bool ships[4][4] = {
  { 0, 1, 1, 0 },
  { 0, 0, 0, 0 },
  { 0, 0, 1, 0 },
  { 0, 0, 1, 0 }
};

// Sledujte, kolik zásahů má hráč a kolik tahů odehrál v těchto proměnných
int hits = 0;
int numberOfTurns = 0;

// Nechte hráče pokračovat, dokud nezasáhne všechny čtyři lodě
while (hits < 4) {
  int row, column;

  cout << "Výběr souřadnic\n";

  // Požádejte hráče o řádek
  cout << "Vyberte číslo řádku mezi 0 a 3: ";
  cin >> řádek;

  // Požádejte hráče o sloupec
  cout << "Vyberte číslo sloupce mezi 0 a 3: ";
  cin >> sloupec;

  // Zkontrolujte, zda v těchto souřadnicích existuje loď
  if (loď[row][column]) {
    // Pokud hráč zasáhne loď, odstraňte ji nastavením hodnoty na nulu.
    loď[row][column] = 0;

    // Zvyšte počítadlo zásahů
    hits++;

    // Řekněte hráči, že zasáhli loď a kolik lodí zbývá
    cout << "Zásah! " << (4-zásahy) << " odečteny.\n\n";
  } else {
    // Řekněte hráči, že minul
    cout << "Vedle\n\n";
  }

  // Spočítejte, kolik tahů hráč prošel
  numberOfTurns++;
}

cout << "Vítězství!\n";
cout << "Vyhráli jste v" << numberOfTurns << " kolech";
Byl tento článek užitečný?
Nelíbí 0
Zobrazeno: 7
Back to top button