chodzi mi o coś takiego
int main()
{
string tab[]={"Napis 1", "Napis 2", "Napis 3"};
unsigned int element;
cin >> element;
for(unsigned int i=0; i<tab->size(); ++i){
if(i==element){
cout << tab[element] << endl;
}
}
return 0;
}
Zacznijmy od podstawowej algorytmiki czyli przekształcenie z O(N)
na O(1)
int main()
{
string tab[]={"Napis 1", "Napis 2", "Napis 3"};
unsigned int i;
cin>>i;
if((0<=i)&&(i<=sizeof(tab)/sizeof(*tab))) cout<<tab[i]<<endl;
return 0;
}
Zauważ teraz nie tylko się kompiluje ale nawet działa.
a jak uzyskać to samo za pomocą iteratora ? Niżej NIEPOPRAWNY kod i nie wiem jak to ugryźć
void data(int number){
std::list<string>::iterator it;
for(it = varItem.begin(); it != varItem.end(); ++it){
cout << it->at(number);
}
}
I tu nasuwa się pytanie: - uzyskać co? Nie widzę nic wspólnego pomiędzy tymi kodami.
Czym jest tym varItem
?
at
jest dla całego kontenera ale nie dla listy.
Jeżeli masz vector<string> varItem;
to wystarczy cout<<varItem[number]<<endl
jeżeli to jest jednak
list<string>::varItem
to:
void data(unsigned number)
{
list<string>::iterator it=begin(varItem);
while((number--)&&(it!=end(varItem))) ++it;
cout<<*it<<endl;
}
Poza tym zmienne globalne? WTF?
Pierwsze czego ci brakuje to zrozumienie faktu że z gówna bata nie ukręcisz
, to alegoria do tego że z twoich kodów nie da się wywnioskować czego chcesz.
Więc pisz po ludzku, coś w stylu:
Mam dane: list<string> varItem {"Napis 1", "Napis 2", "Napis 3"};
Potrzebuje: ...