2016-05-04 8 views
6

Ich möchte einen Standard-Wert ungleich Null für alle Elemente einer Tabelle oder eines 2D-Arrays festlegen. array [size] = {12} legt nur die ersten Elemente fest, 12 und alle anderen sind 0 in einer Zeile. Aber fill (array, array + size, 12) setzt alle Elemente auf 12 in einer Zeile. Ich könnte dies nicht anwenden 2d array.Is es eine Möglichkeit, dies zu tun, indem füllen() oder irgendeine Weise, ohne direkte Initialisierung mit doppelseitigem for-SchleifeWie setze oder initialisiere ich den Standardwert für alle Elemente einer Tabelle oder eines 2D-Arrays oder eines multidimensionalen Arrays?

#include <iostream> 
#include<algorithm> 
#include<vector> 
#include<stdlib.h> 
using namespace std; 

int main() 
{ 
    int arra[10][10];//declare 2d array 

    for(int k=0;k<10;k++)//takes k's value 10 for 10 rows 
    fill(arra,arra+10,45);//select a row and set all columns to 45 didn't work 

} 

Feldinitialisierung http://www.fredosaurus.com/notes-cpp/arrayptr/array-initialization.html

+1

Sie können vorzugsweise [memset()] (http://stackoverflow.com/questions/13327155/memset-definition-and-use) verwenden. –

+0

Verwenden Sie kein RAW-Array. – erip

Antwort

2

fast die gleiche Art und Weise, wie man es mit einem 1- dimensionales Array:

#include <iostream> 
#include <iomanip> 

int main() { 
    int arr[10][10] = { 
     { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, 
     { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 }, 
     { 3, 6, 9, 12, 15, 18, 21, 24, 27, 30 }, 
     { 4, 8, 12, 16, 20, 24, 28, 32, 36, 40 }, 
     { 5, 10, 15, 20, 25, 30, 35, 40, 45, 50 }, 
     { 6, 12, 18, 24, 30, 36, 42, 48, 54, 60 }, 
     { 7, 14, 21, 28, 35, 42, 49, 56, 63, 70 }, 
     { 8, 16, 24, 32, 40, 48, 56, 64, 72, 80 }, 
     { 9, 18, 27, 36, 45, 54, 63, 72, 81, 90 }, 
     { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 } 
    }; 

    for(int i=0; i<10; ++i) { 
     for(int j=0; j<10; ++j) { 
      std::cout << std::setw(4) << arr[i][j]; 
     } 
     std::cout << '\n'; 
    } 
} 

HINWEIS: Der erste Index nicht r einen Wert angeben. In diesem Fall berechnet der Compiler diesen Index automatisch.

int arr[][10] = { ... }; 

EDIT

eine Alternative, die eine doppelte Schleife vermeiden ist:

## Heading ###include <iostream> 
#include <iomanip> 


int main() { 
    int arr[10][10] = {}; // Initializes all values to 0 
    for(int i=0; i<10; ++i) arr[i][0] = 12; 

    for(int i=0; i<10; ++i) { 
     for(int j=0; j<10; ++j) { 
      std::cout << std::setw(4) << arr[i][j]; 
     } 
     std::cout << '\n'; 
    } 
} 
+1

Aber denke, wenn Array-Größe ist 100 * 100 dann, wie schwierig es ist, sie individuell setzen –

1

Für C-Arrays, werden Sie wahrscheinlich memset verwenden möchten. Sie haben dies als C++ markiert, obwohl, so fühle ich mich verpflichtet, eine C zu geben beantworten ++:

std::vector<std::vector<int>> v(10, std::vector<int>(10, 45)); 

Dieses eine std::vector von 10 std::vector<int> s der Größe 10 mit jedem Element bis 45.

See initialisiert erstellt here für das ideone.

1

Eine Lösung (nicht wirklich elegant, weiß ich)

for (auto & row : arra) 
    for (auto & elem : row) 
     elem = 45; 

oder std::fill()

for (auto & row : arra) 
    std::fill(std::begin(row), std::end(row), 45); 

---- EDIT ----

Voll Verwendung sein kann Beispiel

#include <iostream> 

int main() 
{ 
    int a[10][10]; 

    // mode A 
    for (auto & row : a) 
     for (auto & elem : row) 
     elem = 45; 

    // mode B 
    for (auto & row : a) 
     std::fill(std::begin(row), std::end(row), 47); 

    for (int i = 0 ; i < 10 ; ++i) 
    { 
     for (int j = 0 ; j < 10 ; ++j) 
     std::cout << '[' << a[i][j] << ']'; 

     std::cout << '\n'; 
    } 

    return 0; 
} 
+0

Ich benutze C++ 11 .Es zeigt mir Fehler für Auto –

+0

'Auto' (in diesem Zusammenhang) ist ein C++ 11 Feature. Können Sie uns den Fehler zeigen? Ein vollständiges Beispiel hinzugefügt. – max66

+0

C: \ Benutzer \ USER \ Desktop \ ffdg.cpp \ main.cpp | 8 | Warnung: 'auto' ändert Bedeutung in C++ 11; Bitte entferne es [-WC++ 0x-compat] | –

1

Das ist nicht viel besser als Memset, aber zumindest können Sie den Wert angeben, für jede Stelle jeden Bytes mit std :: int fill so verwendet:

#include <algorithm> 
#include <stdio.h> 

int main() { 
    int arra[10][10]; 
    std::fill((int*)arra,(int*)arra+sizeof(arra)/sizeof(int),45); 

    for (auto& row : arra) { 
    for (auto& x : row) 
     printf("%d ", x); 
    puts(""); 
    } 

    return 0; 
} 

Diese angrenzt an den Array-Elementen beruhen Erinnerung.

45 45 45 45 45 45 45 45 45 45 
45 45 45 45 45 45 45 45 45 45 
45 45 45 45 45 45 45 45 45 45 
45 45 45 45 45 45 45 45 45 45 
45 45 45 45 45 45 45 45 45 45 
45 45 45 45 45 45 45 45 45 45 
45 45 45 45 45 45 45 45 45 45 
45 45 45 45 45 45 45 45 45 45 
45 45 45 45 45 45 45 45 45 45 
45 45 45 45 45 45 45 45 45 45 
Verwandte Themen