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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.75
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
07.09.2010, 20:16     индексы и итераторы #1
какая связь между индексами и итераторами.
например, есть вектор. итератор р указывает на елемент со значением 5. как узнать индекс этого елемента.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
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
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
07.09.2010, 20:31  [ТС]     индексы и итераторы #3
а если есть пара значений 5, то мы получем индекс первого елемента, а итератор указывает например на второй
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
07.09.2010, 20:33     индексы и итераторы #4
Mayonez, Итератор указывает на первую 5 и индекс аналогично. Если я ничего не путаю) При find по крайней мере.
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
07.09.2010, 20:41  [ТС]     индексы и итераторы #5
допустим есть вектор: 1 3 5 7 5 5
есть итератор, который указывает на вторую 5
как узнать индекс этого елемента (4)
если вызвать find, то результатом будет 2 (первый найденый елемент)
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
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
4924 / 2504 / 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
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
08.09.2010, 03:43     индексы и итераторы #10
Цитата Сообщение от Mayonez Посмотреть сообщение
какая связь между индексами и итераторами
Доступ по итератору будет осуществляться быстрее. Я не прав?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2010, 15:05     индексы и итераторы
Еще ссылки по теме:

итераторы си++ 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     индексы и итераторы
Ответ Создать тему
Опции темы

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