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

iterator to count - C++

Восстановить пароль Регистрация
 
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
29.03.2013, 01:14     iterator to count #1
Возможно ли как-то получить порядковый номер вместо итератора не используя
локальны счетчик.
Для примера:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
std::string Monster::GetFirstWordOfDescription()
{
    std::cout << description_.c_str() << std::endl; // DELETE
    std::string first_word;
    std::string::iterator space_of_first_world; 
    space_of_first_world = std::find(description_.begin(),description_.end(),' ');
    for ( std::string::iterator iter = description_.begin();iter < space_of_first_world; iter++)
    {
        first_word = first_word + *iter;
    }
 
    return first_word;
}
 
void Monster::SetFirstWordOfDescription(std::string stroka)
{
    //stroka = "" // Временная заглушка
    std::string str = "Rock is Dead";
//  description_.replace(description.begin(),str.length(),str); // Неверно, т.к. чтобы сделать перестановку надо номер элемента первым параметром
    std::cout << description_.c_str() << std::endl;
    
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2013, 01:14     iterator to count
Посмотрите здесь:

C++ list iterator template
std::sort(iterator, iterator, method) подскажите как исправить C++
C++ string iterator
vector<pointer>::iterator C++
vector iterator not decrementable C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SummerRain
 Аватар для SummerRain
325 / 324 / 17
Регистрация: 16.12.2012
Сообщений: 544
29.03.2013, 01:25     iterator to count #2
что-то вроде этого?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <vector>
 
int main()
{
    std::vector<int> a;
    for (int i = 0; i < 10; ++i)
        a.push_back(i);
    std::vector<int>::iterator it = a.begin(), itt = a.begin();
    for (; it != a.end(); ++it) {
        std::cout << a.end() - it << " ";
        //std::cout << it - a.begin() << " ";  // или так
    }
    system("PAUSE");
    return 0;
}
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,511
29.03.2013, 01:28     iterator to count #3
Ну можно брать текущий итератор и вычитать итератор полученный от begin(), но это не самое лучшее решение и лучше уж держать отдельный счётчик
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
29.03.2013, 01:39  [ТС]     iterator to count #4
Цитата Сообщение от Gepar Посмотреть сообщение
лучше уж держать отдельный счётчик
Цитата Сообщение от SummerRain Посмотреть сообщение
что-то вроде этого?
Отсутствие результата тоже результат, то что я не нашел конвертора из итератора в int следовательно его нет, остановлюсь на использовании локальных счетчиков (держать отдельный счетчик).

Если у кого есть еще информация буду рад услышать

Добавлено через 2 минуты
Еще один нюанс? То что если отнимаю от какого-то итератора другой получаю int ? это явное преобразование функции перегруженны для такого значения или это как-то по другому реализуется?
SummerRain
 Аватар для SummerRain
325 / 324 / 17
Регистрация: 16.12.2012
Сообщений: 544
29.03.2013, 01:43     iterator to count #5
Вы мою программу запускали? Она ведь выводит порядковый номер элемента исходя из значения итератора.
Просто из итератора вычитаете бегин.
Или я не совсем понял то, чего требуется?

Вот же код.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <vector>
 
int main()
{
    std::vector<int> a;
    for (int i = 0; i < 10; ++i)
        a.push_back(i);
    std::vector<int>::iterator it = a.begin(), itt = a.begin();
    for (; it != a.end(); ++it) {
        std::cout << it - a.end() << " ";
    }
    int t = it - a.end();  // компилятор не выдал предупреждений и преобразовании типов
    system("PAUSE");
    return 0;
}
Выводит целые отрицательные числа. Получается что инт
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
29.03.2013, 01:51  [ТС]     iterator to count #6
Цитата Сообщение от SummerRain Посмотреть сообщение
Вы мою программу запускали? Она ведь выводит порядковый номер элемента исходя из значения итератора.
Просто из итератора вычитаете бегин.
Да, запустил из за этого и возник вопрос по поводу обьявления операции - (например) подозреваю она такая:
C++
1
int operator- (iter left, iter right);
Или это как-то по другому делается?

Добавлено через 52 секунды
Аааааааа дошло sizeof(int) == sizeof(char(std::string шаг)) значит, оно идет с шагом величины одного char
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
29.03.2013, 01:51     iterator to count #7
Цитата Сообщение от vbloodv Посмотреть сообщение
Еще один нюанс? То что если отнимаю от какого-то итератора другой получаю int ?
Получаете std::iterator_traits<тип-итератора>::difference_type. Это знаковый числовой тип; может быть больше int по размерам, так как обязан вмещать разность любых валидных итераторов (в том числе от одного конца адресного пространства до другого). Естественно, на него также распространяются неявные преобразования числовых типов.
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
29.03.2013, 01:52  [ТС]     iterator to count #8
SummerRain, запишу сейчас на руку чтобы на утро не забыть, спасибо большое !
Mr.X
Эксперт С++
 Аватар для Mr.X
2799 / 1575 / 246
Регистрация: 03.05.2010
Сообщений: 3,658
29.03.2013, 01:52     iterator to count #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
std::distance
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
29.03.2013, 01:56  [ТС]     iterator to count #10
std::cout << sizeof(std::string::difference_type) << std::endl; // 4 вывело, значит это значение(тип) шага?
Цитата Сообщение от Mr.X Посмотреть сообщение
std::distance
+1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2013, 02:11     iterator to count
Еще ссылки по теме:

Segmentation fault (iterator) C++
C++ Iterator
Vector iterator not incrementable C++

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

Или воспользуйтесь поиском по форуму:
SummerRain
 Аватар для SummerRain
325 / 324 / 17
Регистрация: 16.12.2012
Сообщений: 544
29.03.2013, 02:11     iterator to count #11
Так прошу прощения. Вообщем я, конечно, могу ошибаться, но скорее всего тип тут ptrdiff_t
Почитать про него можете тут

Добавлено через 6 минут
И ещё тут почитайтеhttp://darkraha.com/rus/cpp/stl/stl08.php
Yandex
Объявления
29.03.2013, 02:11     iterator to count
Ответ Создать тему
Опции темы

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