|
Страници по тази тема: 1 | 2 | 3 | 4 | (покажи всички)
Тема
|
obhovdane na vector otzad napred
|
|
Автор | Pesho (Нерегистриран) |
Публикувано | 20.10.04 15:38 |
|
Докато се бъзиках със разните STL колекции, се зачудих следното: как да обходя един масив отзад напред?
Отпред назад е ясно: for ( std::vector<int>::iterator It = array.begin() ; It != array.end() ; It++)...
Наобратно обаче не изглежда толкова очевидно. В крайна сметка "for (std::vector<int>::iterator It = array.end() - 1 ; It >= int.begin() ; It--)..." свърши работа, но изглежда отвратително. Предполагам че има по културен начин, така че ще се радвам някой да сподели опита си.
| |
Тема
|
Re: obhovdane na vector otzad napred
[re: Pesho]
|
|
Автор | Paдo (Нерегистриран) |
Публикувано | 20.10.04 16:27 |
|
reverse_iterator, rbegin, rend.
| |
Тема
|
къф е смисъла от тоя итератор бря?
[re: Pesho]
|
|
Автор |
zaphod (void *lpNothing) |
Публикувано | 20.10.04 18:40 |
|
аз не ползвам стл, и като гледам кода който си дал се чувствам щастлив че не го ползвам
но за какъв чеп са сложили тоя итератор, а не просот инт???
NE SUTOR ULTRA CREPIDAM
| |
|
Ami zashtoto obhojdane na svyrzan spisyk s int e malko, hm, bavno.
A pyk na map ili set e malko, hm, bezsmileno.
Bydi shtastliv!
Otkriyte greshkite:
| |
|
като CArray na mfc например?
| |
Тема
|
Re: obhovdane na vector otzad napred
[re: Pesho]
|
|
Автор | chukumba (Нерегистриран) |
Публикувано | 20.10.04 22:45 |
|
Колегата дето е написал за reverse_iterator - е те това е!
По принцип, в модерния C++, неща които се правят във for цикъл, задължително се заменят с std::for_each(iter_begin,iter_end, functor).
а ние всички искаме да сме модерни нал-тъй!
а пък дето се бъзикаш, по добре фани па се бъзикай с неко друг език. C++ и STL са си болка в гъза.
| |
Тема
|
Re: къф е смисъла от тоя итератор бря?
[re: zaphod]
|
|
Автор | Paдo (Нерегистриран) |
Публикувано | 21.10.04 08:54 |
|
Спокойно можеш да обхождаш vector с int:
std::vector<int> v(10, 0);
for (int i = 0; i < v.size(); i++) { v += i; }
Итераторите се използват за абстракция на редица:
std::find(l.begin(), l.end(), 0)
std::find(v.begin(), v.end(), 0)
т.е. по един и същи начин можеш да намериш елемент, независимо дали търсиш в list или vector. Всъщност основната идея е да се абстрахираш от точния вид на торбата, която ползваш. С помощта на fill, find, for_each, generate и т.н. в огромна част от кода изобщо може да няма нужда от явни цикли.
| |
Тема
|
Re: къф е смисъла от тоя итератор бря?
[re: Paдo]
|
|
Автор | Paдo (Нерегистриран) |
Публикувано | 21.10.04 08:56 |
|
Мааму стара тоя мета език...
v[ i ] имах предвид в примера.
| |
Тема
|
Re: obhovdane na vector otzad napred
[re: chukumba]
|
|
Автор | Pesho (Нерегистриран) |
Публикувано | 21.10.04 09:14 |
|
То че е хубаво "for_each" да се ползва е ясно, ама трудно ще ме накара човек да пиша отделна функция за това, при положение че тялото на цикъла е един ред...
| |
Тема
|
Re: obhovdane na vector otzad napred
[re: Pesho]
|
|
Автор | Paдo (Нерегистриран) |
Публикувано | 21.10.04 10:02 |
|
Всъщност for_each не е много хубаво да се ползва :) Когато го срещнеш в кода от пръв поглед може да кажеш само, че правиш 'нещо' върху редицата. 'Нещото' може да бъде от търсене през инициализиране до генериране на нова редица. find, fil, generate, transform често са по-добри алтернативи.
| |
|
Страници по тази тема: 1 | 2 | 3 | 4 | (покажи всички)
|
|
|