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

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

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

iterator to count - C++

29.03.2013, 01:14. Просмотров 1005. Ответов 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;
    
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2013, 01:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос iterator to count (C++):

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 оператора - начальный,...

Странная ошибка volatile int count - count не является однозначным. Ещё про CloseHandle - для чего это? - C++
Странная ошибка volatile int count - count не является однозначным. Ещё про CloseHandle - для чего это? КОд:#include &quot;stdafx.h&quot; ...

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 ...

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

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

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

Добавлено через 2 минуты
Еще один нюанс? То что если отнимаю от какого-то итератора другой получаю int ? это явное преобразование функции перегруженны для такого значения или это как-то по другому реализуется?
0
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
29.03.2013, 01:43 #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;
}
Выводит целые отрицательные числа. Получается что инт
1
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
29.03.2013, 01:51  [ТС] #6
Цитата Сообщение от SummerRain Посмотреть сообщение
Вы мою программу запускали? Она ведь выводит порядковый номер элемента исходя из значения итератора.
Просто из итератора вычитаете бегин.
Да, запустил из за этого и возник вопрос по поводу обьявления операции - (например) подозреваю она такая:
C++
1
int operator- (iter left, iter right);
Или это как-то по другому делается?

Добавлено через 52 секунды
Аааааааа дошло sizeof(int) == sizeof(char(std::string шаг)) значит, оно идет с шагом величины одного char
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
29.03.2013, 01:51 #7
Цитата Сообщение от vbloodv Посмотреть сообщение
Еще один нюанс? То что если отнимаю от какого-то итератора другой получаю int ?
Получаете std::iterator_traits<тип-итератора>::difference_type. Это знаковый числовой тип; может быть больше int по размерам, так как обязан вмещать разность любых валидных итераторов (в том числе от одного конца адресного пространства до другого). Естественно, на него также распространяются неявные преобразования числовых типов.
1
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
29.03.2013, 01:52  [ТС] #8
SummerRain, запишу сейчас на руку чтобы на утро не забыть, спасибо большое !
0
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
29.03.2013, 01:52 #9
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
std::distance
4
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
29.03.2013, 01:56  [ТС] #10
std::cout << sizeof(std::string::difference_type) << std::endl; // 4 вывело, значит это значение(тип) шага?
Цитата Сообщение от Mr.X Посмотреть сообщение
std::distance
+1
1
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
29.03.2013, 02:11 #11
Так прошу прощения. Вообщем я, конечно, могу ошибаться, но скорее всего тип тут ptrdiff_t
Почитать про него можете тут

Добавлено через 6 минут
И ещё тут почитайтеhttp://darkraha.com/rus/cpp/stl/stl08.php
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2013, 02:11
Привет! Вот еще темы с ответами:

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; ...

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; ...

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

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


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

Или воспользуйтесь поиском по форуму:
11
Yandex
Объявления
29.03.2013, 02:11
Ответ Создать тему
Опции темы

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