Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.75
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
#1

индексы и итераторы - C++

07.09.2010, 20:16. Просмотров 3226. Ответов 10
Метки нет (Все метки)

какая связь между индексами и итераторами.
например, есть вектор. итератор р указывает на елемент со значением 5. как узнать индекс этого елемента.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2010, 20:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос индексы и итераторы (C++):

Итераторы и обратные итераторы - C++
У вектора есть два типа итераторов, обычные и обратные итераторы произвольного доступа... Обычные реализовал, осталось обратные. Решил...

Преобразование массива. Нечетные индексы слева, четные индексы справа - C++
Добрый вечер. Задание таково: дан некоторый массив произвольной длины, требуется преобразовать его так, чтобы элементы с четными индексами...

Вывести начальные и конечные индексы индексы всех непрерывных знакопеременных последовательностей чисел - C++
Даны 3 массива.Вывести начальные и конечные индексы индексы всех непрерывных знакопеременных последовательностей чисел.Решить,используя...

итераторы - C++
ребят помогите плиз vector<double>::iterator t = matrix.begin(); vector<double>::iterator t1 = matrix.end(); for(;t<t1;t++) ...

Итераторы - C++
Всем добрый вечер! Есть небольшие затруднения , вот например фрагмент кода: //... multimap<int,Point> divisionP; ...

Итераторы - C++
Не могу въехать как работают итераторы, литература-форумы не помогли, увы. На 26й строке то, что не могу осилить. Прохожу по стеку...

10
easybudda
Модератор
Эксперт CЭксперт С++
9698 / 5648 / 964
Регистрация: 25.07.2009
Сообщений: 10,863
07.09.2010, 20:29 #2
Цитата Сообщение от Mayonez Посмотреть сообщение
например, есть вектор. итератор р указывает на елемент со значением 5. как узнать индекс этого елемента.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>
 
int main(){
    std::vector<int> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);
    vec.push_back(4);
    vec.push_back(5);
    vec.push_back(6);
    
    std::vector<int>::iterator it;
    if ( ( it = std::find(vec.begin(), vec.end(), 5) ) == vec.end() )
        std::cout << "No elements with value 5" << std::endl;
    else
        std::cout << "Value 5 contain element with index " << std::distance(vec.begin(), it) << std::endl;
    
    return 0;
}
0
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
07.09.2010, 20:31  [ТС] #3
а если есть пара значений 5, то мы получем индекс первого елемента, а итератор указывает например на второй
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
07.09.2010, 20:33 #4
Mayonez, Итератор указывает на первую 5 и индекс аналогично. Если я ничего не путаю) При find по крайней мере.
0
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
07.09.2010, 20:41  [ТС] #5
допустим есть вектор: 1 3 5 7 5 5
есть итератор, который указывает на вторую 5
как узнать индекс этого елемента (4)
если вызвать find, то результатом будет 2 (первый найденый елемент)
0
easybudda
Модератор
Эксперт CЭксперт С++
9698 / 5648 / 964
Регистрация: 25.07.2009
Сообщений: 10,863
07.09.2010, 21:07 #6
Mayonez, так пойдёт?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>
 
int main(){
    std::vector<int> vec;
    vec.push_back(1);
    vec.push_back(3);
    vec.push_back(5);
    vec.push_back(7);
    vec.push_back(5);
    vec.push_back(5);
    
    int cnt;
    
    std::vector<int>::iterator it;
    for ( cnt = 0, it = std::find(vec.begin(), vec.end(), 5); it != vec.end(); 
        ++cnt, it = std::find(++it, vec.end(), 5) )
            std::cout << "ARRAY[" << std::distance(vec.begin(), it) << "]" << std::endl;
    if ( ! cnt )
        std::cout << "No elements with value 5 found in array." << std::endl;
    else
        std::cout << "Found " << cnt << " elements." << std::endl;
    
    return 0;
}
1
fasked
Эксперт С++
4951 / 2531 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
07.09.2010, 21:13 #7
Mayonez, нужно взять разницу адресов элемента, на который указывает итератор, и первого элемента в векторе. Пример, приведенный easybudda, именно это и делает.
1
Mayonez
07.09.2010, 21:17  [ТС]
  #8

Не по теме:

дошло... спс

0
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
07.09.2010, 22:39 #9
Цитата Сообщение от fasked Посмотреть сообщение
Mayonez, нужно взять разницу адресов элемента, на который указывает итератор, и первого элемента в векторе. Пример, приведенный easybudda, именно это и делает.
естественно разница в лоб работает только для итераторов произвольного доступа, distance - общее решение
0
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
08.09.2010, 03:43 #10
Цитата Сообщение от Mayonez Посмотреть сообщение
какая связь между индексами и итераторами
Доступ по итератору будет осуществляться быстрее. Я не прав?
0
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
08.09.2010, 15:05 #11
Цитата Сообщение от Nameless One Посмотреть сообщение
Доступ по итератору будет осуществляться быстрее. Я не прав?
кажется наврятли, с другой стороны в любом случае зависит от конкретной реализации
0
08.09.2010, 15:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2010, 15:05
Привет! Вот еще темы с ответами:

Итераторы - C++
Добрый день! Начал изучать классы в C++ параллельно с итераторами. Решил сделать простенькую программу, которая создаёт список классов....

итераторы си++ - C++
подскажите пожалуйста какие существуют методы итераторов? и что они делают?

Итераторы - C++
Как указать не на следующий за последним элемент последовательности, а на последний! end() - следующий за последним Добавлено через...

Итераторы - C++
При удалении элемента из списка (list) - ошибка list iterator not decrementable Что делать? for(Iter = npc.begin(); Iter !=...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.