Dus ik heb het volgende:
std::vector< std::vector <int> > fog;
en ik initialiseer het heel naïef, zoals:
for(int i=0; i<A_NUMBER; i++)
{
std::vector <int> fogRow;
for(int j=0; j<OTHER_NUMBER; j++)
{
fogRow.push_back( 0 );
}
fog.push_back(fogRow);
}
En het voelt heel verkeerd… Is er een andere manier om een vector als deze te initialiseren?
Antwoord 1, autoriteit 100%
Gebruik de std::vector::vector(count, value)
constructor die een initiële grootte en een standaardwaarde accepteert:
std::vector<std::vector<int> > fog(
ROW_COUNT,
std::vector<int>(COLUMN_COUNT)); // Defaults to zero initial value
Als een andere waarde dan nul, zeg 4
bijvoorbeeld, de standaardwaarde moest zijn, dan:
std::vector<std::vector<int> > fog(
ROW_COUNT,
std::vector<int>(COLUMN_COUNT, 4));
Ik moet ook vermelden dat uniforme initialisatie is geïntroduceerd in C++11, wat de initialisatie van vector
en andere containers mogelijk maakt, met behulp van {}
:
std::vector<std::vector<int> > fog { { 1, 1, 1 },
{ 2, 2, 2 } };
Antwoord 2, autoriteit 32%
Stel dat u 2D-vector, m*n, wilt initialiseren met een beginwaarde van 0
we zouden dit kunnen doen
#include<iostream>
int main(){
int m = 2, n = 5;
vector<vector<int>> vec(m, vector<int> (n, 0));
return 0;
}
Antwoord 3, autoriteit 15%
Er is geen append
methode in std::vector
, maar als je een vector wilt maken met A_NUMBER
vectoren van int
, elk met other_number
nullen, dan kun je dit doen:
std::vector<std::vector<int>> fog(A_NUMBER, std::vector<int>(OTHER_NUMBER));
Antwoord 4, autoriteit 4%
De algemene syntaxis, zoals al afgebeeld is:
std::vector<std::vector<int> > v (A_NUMBER, std::vector <int> (OTHER_NUMBER, DEFAULT_VALUE))
Hier kan de vector ‘v’ worden gevisualiseerd als een tweedimensionale array, met ‘A_NUMBER’ rijen, met ‘OTHER_NUMBER’ kolommen waarvan de beginwaarde is ingesteld op ‘DEFAULT_VALUE’.
Het kan ook als volgt worden geschreven:
std::vector <int> line(OTHER_NUMBER, DEFAULT_VALUE)
std::vector<std::vector<int> > v(A_NUMBER, line)
Het invoeren van waarden in een 2D-vector is vergelijkbaar met het invoeren van waarden in een 2D-array:
for(int i = 0; i < A_NUMBER; i++) {
for(int j = 0; j < OTHER_NUMBER; j++) {
std::cin >> v[i][j]
}
}
Voorbeelden zijn al genoemd in andere antwoorden….!
Antwoord 5, autoriteit 2%
De aanbevolen aanpak is om de vulconstructor te gebruiken om een tweedimensionale vector met een bepaalde standaardwaarde te initialiseren
:
std::vector<std::vector<int>> fog(M, std::vector<int>(N, default_value));
waar,
M en N zijn afmetingen voor uw 2D-vector.
Antwoord 6, autoriteit 2%
Ik denk dat de gemakkelijkste manier om het voor elkaar te krijgen is:
std::vector<std::vector<int>>v(10,std::vector<int>(11,100));
10 is de grootte van de buitenste of globale vector, die de belangrijkste is, en 11 is de grootte van de binnenste vector van het type int, en de initiële waarden worden geïnitialiseerd op 100! Dat is mijn eerste hulp op de stapel, ik denk dat het iemand helpt.
Antwoord 7
Stel dat u een tweedimensionale geheeltallige vector wilt initialiseren met n rijen en m kolom met elk de waarde ‘VAL‘
Schrijf het als
std::vector<vector<int>> arr(n, vector<int>(m,VAL));
Deze VAL kan een gehele variabele of constante zijn, zoals 100
Antwoord 8
Dit is wat voor mij werkte:
vector<vector<int>> minA{ROW_SIZE, vector<int>(COLUMN_SIZE, VALUE)};
Antwoord 9
Dit codefragment kopieert de ene tweedimensionale vector naar de andere. En geeft ons een duidelijk beeld van hoe we de 2D-vector moeten initialiseren.
void copyVectorToVector(vector<vector<int>> matrix) {
int rowNumber = matrix.size();
int columnNumber = matrix[0].size();
vector<vector<int>> result(rowNumber, vector<int> (columnNumber, 0));
for(int i=0;i<matrix.size();i++){
for(int j=0;j<matrix[i].size();j++){
result[i][j] = matrix[i][j];
cout<<result[i][j]<<" ";
}
cout<<endl;
}
}
Antwoord 10
Mijn c++ STL
-code om 5*3 2-D vector
te initialiseren met zero
#include <iostream>
using namespace std;
#include <vector>
int main()
{// if we wnt to initialise a 2 D vector with 0;
vector<vector<int>> v1(5, vector<int>(3,0));
for(int i=0;i<v1.size();i++)
{
for(int j=0;j<v1[i].size();j++)
cout<<v1[i][j]<<" ";
cout<<endl;
}
}