Форум программистов, компьютерный форум CyberForum.ru

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

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

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

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

какая связь между индексами и итераторами.
например, есть вектор. итератор р указывает на елемент со значением 5. как узнать индекс этого елемента.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Эксперт С++
 Аватар для easybudda
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
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;
}
Mayonez
 Аватар для Mayonez
380 / 272 / 20
Регистрация: 26.12.2009
Сообщений: 875
07.09.2010, 20:31  [ТС]     индексы и итераторы #3
а если есть пара значений 5, то мы получем индекс первого елемента, а итератор указывает например на второй
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
07.09.2010, 20:33     индексы и итераторы #4
Mayonez, Итератор указывает на первую 5 и индекс аналогично. Если я ничего не путаю) При find по крайней мере.
Mayonez
 Аватар для Mayonez
380 / 272 / 20
Регистрация: 26.12.2009
Сообщений: 875
07.09.2010, 20:41  [ТС]     индексы и итераторы #5
допустим есть вектор: 1 3 5 7 5 5
есть итератор, который указывает на вторую 5
как узнать индекс этого елемента (4)
если вызвать find, то результатом будет 2 (первый найденый елемент)
easybudda
Эксперт С++
 Аватар для easybudda
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
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;
}
fasked
Эксперт C++
 Аватар для fasked
4929 / 2509 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
07.09.2010, 21:13     индексы и итераторы #7
Mayonez, нужно взять разницу адресов элемента, на который указывает итератор, и первого элемента в векторе. Пример, приведенный easybudda, именно это и делает.
Mayonez
07.09.2010, 21:17  [ТС]
  #8

Не по теме:

дошло... спс

alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
07.09.2010, 22:39     индексы и итераторы #9
Цитата Сообщение от fasked Посмотреть сообщение
Mayonez, нужно взять разницу адресов элемента, на который указывает итератор, и первого элемента в векторе. Пример, приведенный easybudda, именно это и делает.
естественно разница в лоб работает только для итераторов произвольного доступа, distance - общее решение
Nameless One
Эксперт С++
 Аватар для Nameless One
5760 / 3409 / 255
Регистрация: 08.02.2010
Сообщений: 7,406
08.09.2010, 03:43     индексы и итераторы #10
Цитата Сообщение от Mayonez Посмотреть сообщение
какая связь между индексами и итераторами
Доступ по итератору будет осуществляться быстрее. Я не прав?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2010, 15:05     индексы и итераторы
Еще ссылки по теме:

итераторы C++
C++ Итераторы
C++ Вывести начальные и конечные индексы индексы всех непрерывных знакопеременных последовательностей чисел
C++ Итераторы С++
C++ Итераторы

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

Или воспользуйтесь поиском по форуму:
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
08.09.2010, 15:05     индексы и итераторы #11
Цитата Сообщение от Nameless One Посмотреть сообщение
Доступ по итератору будет осуществляться быстрее. Я не прав?
кажется наврятли, с другой стороны в любом случае зависит от конкретной реализации
Yandex
Объявления
08.09.2010, 15:05     индексы и итераторы
Ответ Создать тему
Опции темы

Текущее время: 17:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru