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

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

Войти
Регистрация
Восстановить пароль
 
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
#1

iterator to count - C++

29.03.2013, 01:14. Просмотров 964. Ответов 10
Метки нет (Все метки)

Возможно ли как-то получить порядковый номер вместо итератора не используя
локальны счетчик.
Для примера:
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
Посмотрите здесь:

std::sort(iterator, iterator, method) подскажите как исправить - C++
Уважаемые Знатоки!!! Вашему вниманию предоставляю код: #include &quot;stdafx.h&quot; #include &lt;vector&gt; #include &lt;algorithm&gt; class...

Нюансы синтаксиса: statement for - как понимать запись for (count=0, mask=1; count != 16; count++, mask<<= 1)? - C++
Много всяких языков попадалось, относительно много конечно, но такое вижу первый раз, что бы тело FOR имело не 3 оператора - начальный,...

Iterator - C++
vector &lt;char&gt;::iterator stek; *stek = '0'; После второй строчки программа при выполнении вылетает, почему?

Iterator - C++
Почему следующая конструкция не работает: vector&lt;int&gt; v(10); vector&lt;int&gt;::iterator v_ptr; v_ptr = v.begin(); // v_ptr = 0 ...

Iterator not deferencable - C++
#include&lt;iostream&gt; #include&lt;locale.h&gt; #include&lt;list&gt; #include&lt;fstream&gt; #include&lt;string&gt; #include&lt;conio.h&gt; using namespace std; ...

Map iterator - C++
map&lt;string, int&gt; m; m.insert(pair&lt;string, int&gt;(&quot;a&quot;, 1)); map&lt;string, int&gt;::iterator it = m.begin(); cout &lt;&lt; *it; ...

string iterator - C++
Почему выдает ошибку при перемещение итератора на другую позицию? #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SummerRain
326 / 325 / 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
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
29.03.2013, 01:28     iterator to count #3
Ну можно брать текущий итератор и вычитать итератор полученный от begin(), но это не самое лучшее решение и лучше уж держать отдельный счётчик
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
29.03.2013, 01:39  [ТС]     iterator to count #4
Цитата Сообщение от Gepar Посмотреть сообщение
лучше уж держать отдельный счётчик
Цитата Сообщение от SummerRain Посмотреть сообщение
что-то вроде этого?
Отсутствие результата тоже результат, то что я не нашел конвертора из итератора в int следовательно его нет, остановлюсь на использовании локальных счетчиков (держать отдельный счетчик).

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

Добавлено через 2 минуты
Еще один нюанс? То что если отнимаю от какого-то итератора другой получаю int ? это явное преобразование функции перегруженны для такого значения или это как-то по другому реализуется?
SummerRain
326 / 325 / 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
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
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
29.03.2013, 01:51     iterator to count #7
Цитата Сообщение от vbloodv Посмотреть сообщение
Еще один нюанс? То что если отнимаю от какого-то итератора другой получаю int ?
Получаете std::iterator_traits<тип-итератора>::difference_type. Это знаковый числовой тип; может быть больше int по размерам, так как обязан вмещать разность любых валидных итераторов (в том числе от одного конца адресного пространства до другого). Естественно, на него также распространяются неявные преобразования числовых типов.
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
29.03.2013, 01:52  [ТС]     iterator to count #8
SummerRain, запишу сейчас на руку чтобы на утро не забыть, спасибо большое !
Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
29.03.2013, 01:52     iterator to count #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
std::distance
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
Еще ссылки по теме:

STL vector iterator - C++
есть список в списке... ..точнее: vector &lt;Class1*&gt; mapClass1; а уже в Class1 определён вектор vector &lt;Class2*&gt; mapClass2; ...

Vector iterator not incrementable - C++
Здравствуйте. Подскажите, из-за чего не работает код? При запуске программы появляется ошибка: &quot;... expression: vector iterator not...

list iterator template - C++
пишу в хэдере #include &lt;list&gt; using namespace std; template &lt;class T&gt; struct Transition { list&lt;T&gt;::iterator it; }; ...

STL List Iterator - C++
Как в STL list из итератора получить номер элемента, на который он указывает? Вот пример с вектором: cliext::vector&lt;int&gt;::iterator it; ...

deque iterator not dereferencable - C++
итак программа должна считывать из файла данные об автобусных маршрутах (имя водителя, номер маршрута и т.д.). После этого сортировать...


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

Или воспользуйтесь поиском по форуму:
SummerRain
326 / 325 / 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
Ответ Создать тему
Опции темы

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