Un esempio di "vettore" con righe di lunghezza diversa:
codice:
#include <iostream>
#include <vector>
#include <limits>
#include <sstream>
using namespace std;
template<class inType> void AcquireInput(ostream & Os, istream & Is, const string & Prompt, inType & Result)
{
do
{
Os<<Prompt.c_str();
if(Is.fail())
{
Is.clear();
Is.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
Is>>Result;
} while(Is.fail());
}
template<class inType> inType AcquireInput(ostream & Os, istream & Is, const string & Prompt)
{
inType temp;
AcquireInput(Os,Is,Prompt,temp);
return temp;
}
int main()
{
bool endVector=false;
vector< vector<int> > vect;
cout<<"Inserisci 0 per terminare la riga o qualunque numero negativo per terminare il vettore"<<endl;
for(int row=0;!endVector;row++)
{
vect.push_back(vector<int>());
cout<<endl;
for(int column=0;;column++)
{
ostringstream os;
int value;
os<<'['<<row<<','<<column<<']';
value=AcquireInput<int>(cout,cin,os.str());
if(value==0)
break;
else if(value<0)
{
endVector=true;
if(vect.back().size()==0)
vect.pop_back();
break;
}
else
vect.back().push_back(value);
}
}
cout<<"Stampa contenuto vettore"<<endl;
for(size_t row=0;row<vect.size();row++)
{
for(size_t column=0;column<vect[row].size();column++)
{
cout<<vect[row][column]<<' ';
}
cout<<endl;
}
return 0;
}