How to set or initialize the default value for all elements of a table or 2d array or multidimensional array

I want to set a non-zero default value for all elements of a table or 2d array. array [size] = {12} sets the first elements to only 12, and the rest to 0 in the string. But fill (array, array + size, 12) sets all elements to 12 only in a row. I could not apply this to a 2d array.Is there is a way to do this using fill () or in any way without direct initialization using double for loop

#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 value 10 for 10 rows fill(arra,arra+10,45);//select a row and set all columns to 45 didn't work } 

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

+6
source share
4 answers

Almost the same as with a 1-dimensional 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'; } } 

NOTE. The first index does not require a value. In this case, the compiler will automatically calculate this index.

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

EDIT

An alternative that avoids a double cycle is:

 ## 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'; } } 
+2
source

For C arrays, you probably want to use memset . You marked this as C ++, so I feel obligated to give a C ++ answer:

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

This creates a std::vector from 10 std::vector<int> size 10 with each element initialized to 45.

See here for ideone.

+1
source

The solution (not very elegant, I know) may be

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

or using std::fill()

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

---- EDIT ----

Full example

 #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; } 
+1
source

This is not much better than memset, but at least you can specify a value for each int instead of every byte when using std :: fill:

 #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; } 

It depends on the fact that the elements of the array are contiguous in memory.

 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 
+1
source

All Articles