Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
MasterCode
0 / 0 / 0
Регистрация: 19.08.2015
Сообщений: 26
#1

Iterator

21.10.2015, 20:38. Просмотров 901. Ответов 10
Метки нет (Все метки)

C++
1
2
vector <char>::iterator stek;
*stek = '0';
После второй строчки программа при выполнении вылетает, почему?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2015, 20:38
Ответы с готовыми решениями:

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

Iterator
Почему следующая конструкция не работает: vector&lt;int&gt; v(10);...

string iterator
Почему выдает ошибку при перемещение итератора на другую позицию? #include...

iterator to count
Возможно ли как-то получить порядковый номер вместо итератора не используя...

Iterator not deferencable
#include&lt;iostream&gt; #include&lt;locale.h&gt; #include&lt;list&gt; #include&lt;fstream&gt;...

10
Goldutop
10 / 10 / 10
Регистрация: 04.09.2014
Сообщений: 62
Завершенные тесты: 1
21.10.2015, 20:44 #2
Лучший ответ Сообщение было отмечено MasterCode как решение

Решение

Потому что он ни на что не указывает.
0
MasterCode
0 / 0 / 0
Регистрация: 19.08.2015
Сообщений: 26
21.10.2015, 20:51  [ТС] #3
А как инициализировать его. Я так понимаю, что как с указателями не пройдет(pointer = 0)
0
Renji
2102 / 1543 / 470
Регистрация: 05.06.2014
Сообщений: 4,466
21.10.2015, 20:52 #4
Завести этот самый vector<char> и прочитать оттуда итератор. .begin(), например.
0
MasterCode
0 / 0 / 0
Регистрация: 19.08.2015
Сообщений: 26
21.10.2015, 20:54  [ТС] #5
А без введения вектора, непосредственно можно?
0
Goldutop
10 / 10 / 10
Регистрация: 04.09.2014
Сообщений: 62
Завершенные тесты: 1
21.10.2015, 20:55 #6
MasterCode,
C++
1
2
3
4
vector<char> vec{ '1', '2' };
vector<char>::iterator it;
it = vec.begin();
*it = '0';
0
Goldutop
10 / 10 / 10
Регистрация: 04.09.2014
Сообщений: 62
Завершенные тесты: 1
21.10.2015, 20:56 #7
MasterCode, а в чем тогда смысл?
0
MasterCode
0 / 0 / 0
Регистрация: 19.08.2015
Сообщений: 26
21.10.2015, 20:58  [ТС] #8
А напрямую никак нельзя?

Добавлено через 2 минуты
Goldutop, ну я понимаю что если без вектора, то надо заводить указатель, но просто хотел через итератор сделать
0
Goldutop
10 / 10 / 10
Регистрация: 04.09.2014
Сообщений: 62
Завершенные тесты: 1
21.10.2015, 21:03 #9
Цитата Сообщение от MasterCode Посмотреть сообщение
Goldutop, ну я понимаю что если без вектора, то надо заводить указатель, но просто хотел через итератор сделать
Ну, я, конечно, далеко не эксперт, но по-моему, в этом нету смысла.
0
Renji
2102 / 1543 / 470
Регистрация: 05.06.2014
Сообщений: 4,466
21.10.2015, 21:05 #10
Цитата Сообщение от MasterCode Посмотреть сообщение
А напрямую никак нельзя?
Можно, но с бубном. И писать в такой итератор все равно будет нельзя, так как он никуда не указывает. Но, по крайней мере, его можно будет проверить на "пусто/куда-то указывает".
C++
1
2
3
4
5
6
const vector <char>::iterator empty_iterator;
int main()
{
    vector <char>::iterator it=empty_iterator;
    if(it==empty_iterator)
       ....
Добавлено через 1 минуту
Цитата Сообщение от Goldutop Посмотреть сообщение
Ну, я, конечно, далеко не эксперт, но по-моему, в этом нету смысла.
Смысл в некоторых случаях есть. Например, потоковые итераторы используют "пустой" итератор вместо end().
3
hoggy
Заблокирован
Эксперт С++
21.10.2015, 22:49 #11
Цитата Сообщение от MasterCode Посмотреть сообщение
А без введения вектора, непосредственно можно?
нет, нельзя.

итератор для того и существует:
что бы итерироваться по элементам контейнера.

нет контейнера - нет данных.

C++
1
*stek = '0'; //<--- здесь вы пытаетесь изменить элемент контейнера
данные являются собственностью контейнера.
итератор лишь умеет по ним итерироваться,
и получать к ним доступ.

но если итератор не связан ни с каким контейнером,
то он в принципе не сможет получить доступ
к "данным в сферическом вакууме".

Цитата Сообщение от Renji Посмотреть сообщение
Но, по крайней мере, его можно будет проверить на "пусто/куда-то указывает".
не знал, что можно сравнивать невалидные итераторы.

Цитата Сообщение от Renji Посмотреть сообщение
Смысл в некоторых случаях есть. Например, потоковые итераторы используют "пустой" итератор вместо end().
нет никакого смысла.
даже если итератор умеет самостоятельно определять,
валидный он или нет:

C++
1
while(it) ++it; //<--- валидный, пока не равен end() или не пуст
но из этого никак не вытекает "сакральный смысл"
прицеплять к итератору данные
в условиях отсутствия контейнера-владельца.

рассмотрим дизайн std::filesystem

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
28
29
30
31
32
33
#include <algorithm>
#include <iostream>
#include <vector>
#include <filesystem>
 
 
int main()
{
    std::cout << "WELLCOME TO EXAMPLE APPLICATION!\n";
 
    //namespace fs = boost::filesystem;
 
    //msvc2013
    namespace fs = std::tr2::sys;
    
    //fs::path p = fs::initial_path<fs::path>();
    fs::path p = fs::current_path<fs::path>();
 
    std::vector<fs::path> 
        files;
 
    std::copy(
        fs::directory_iterator(p),   // begin()
        fs::directory_iterator(),    // end()
        std::back_inserter(files)
    );
 
    std::copy(
        files.begin(), 
        files.end(), 
        std::ostream_iterator<fs::path>(std::cout, "\n")
    );
}
здесь мы видим:
пустой итератор интерпретируется так же,
как и итератор указывающий за последний элемент коллекции.

однако, что бы сделать не пустой итератор,
все равно нужен источник данных: контейнер

в качестве которого выступает имя каталога, например.
или любой другой контейнер чевотов.
0
21.10.2015, 22:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2015, 22:49

Map iterator
map&lt;string, int&gt; m; m.insert(pair&lt;string, int&gt;(&quot;a&quot;, 1)); map&lt;string,...

STL vector iterator
есть список в списке... ..точнее: vector &lt;Class1*&gt; mapClass1; а уже в...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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