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

Вектор и его итератор - C++

Восстановить пароль Регистрация
 
Анд_Рей
2 / 2 / 0
Регистрация: 27.12.2009
Сообщений: 145
21.09.2013, 21:40     Вектор и его итератор #1
На сколько мне известно,векторы выполняют вставку и удаление в X позицию контейнера на которую указывает его итератор: т.е. метод вставки выглядит примерно так;
C++
1
vec.insert(itr,"data");
где itr указывает на X позицию?
как заставить итератор указывать на определенную позицию в контейнере?и как это реализовать?
Спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
21.09.2013, 21:45     Вектор и его итератор #2
сначала можно установить итератор на начало вектора, и после этого сдвинуть на две позиции:

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
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <vector>
using namespace std;
 
int main()
{
    system("chcp 1251 > nul");
 
    vector<string>  v;
 
    v.push_back("aaa");
    v.push_back("bbb");
    v.push_back("ccc");
    v.push_back("ddd");
 
    vector<string>::iterator itr = v.begin();
 
    itr+=2;
    v.insert(itr, "data");
 
    for (vector<string>::const_iterator iter=v.begin(); iter!=v.end(); iter++)
        cout << *iter << " ";
 
    cout << endl;
 
    system("pause");
    return 0;
}
Анд_Рей
2 / 2 / 0
Регистрация: 27.12.2009
Сообщений: 145
21.09.2013, 21:52  [ТС]     Вектор и его итератор #3
А можно сделать что-то в это роде:
C++
1
2
3
4
5
Vector<Employee> emps;
Vector<Employee>::Iterator itr = emps.begin();
 
itr << 10; // itr указывает на позицию 10
itr << 5;   // а теперь на позицию  5
если это возможно,то как перегрузить оператор <<??
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,016
Записей в блоге: 10
Завершенные тесты: 1
21.09.2013, 21:59     Вектор и его итератор #4
К вектору можно применять оператор subscript, т.е.:
C++
1
2
3
4
    vector <int> vi;
    ...
    cout << vi[10];
    ...
Это позволит тебе обратиться к конкретному элементу вектора без итератора.
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
21.09.2013, 22:07     Вектор и его итератор #5
Цитата Сообщение от Анд_Рей Посмотреть сообщение
itr << 10; // itr указывает на позицию 10
больше напоминает сдвиг битов, чем перемещение итератора)
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,016
Записей в блоге: 10
Завершенные тесты: 1
21.09.2013, 22:08     Вектор и его итератор #6
_, это больше напоминает сдвиг битов, чем перемещение итератора ?)
Просто ты как-то не уверенно это сказал...))
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
21.09.2013, 22:13     Вектор и его итератор #7
Цитата Сообщение от castaway Посмотреть сообщение
это больше напоминает сдвиг битов, чем перемещение итератора ?)
да) какое здесь перемещение?
Цитата Сообщение от Анд_Рей Посмотреть сообщение
itr << 10;
вообще непонятно что это означает
Анд_Рей
2 / 2 / 0
Регистрация: 27.12.2009
Сообщений: 145
21.09.2013, 22:27  [ТС]     Вектор и его итератор #8
Ок!))Согласен
C++
1
itr << 10;
эт я погорячился!)
Как такой вариант(c точки зрения синтаксиса)??
C++
1
2
3
4
5
Iterator operator[](int x)
{
    T* pos = start + x-1;
    return Iterator(pos);
}
итератор перемещается вот так
C++
1
2
itr = emps[10]; //itr указывает на позицию 10
itr = emps[5]; //itr указывает на позицию 5
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,016
Записей в блоге: 10
Завершенные тесты: 1
21.09.2013, 22:39     Вектор и его итератор #9
_, это перегруженный оператор, такой же как и в ostream.
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
21.09.2013, 22:49     Вектор и его итератор #10
castaway, но если его использовать, то нужно разыменовывать?
C++
1
cout << *itr; // работает
но если вот так сделать
C++
1
cout << itr
то показывает ошибку
error: no match for 'operator<<' in 'std::cout << itr'|
Добавлено через 1 минуту
итератор сам по себе является указателем. непонятно почему нельзя узнать его адрес cout << itr;
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
21.09.2013, 23:05     Вектор и его итератор #11
Цитата Сообщение от _ Посмотреть сообщение
итератор сам по себе является указателем. непонятно почему нельзя узнать его адрес cout << itr;
Потому что итератор сам по себе не является указателем.
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
21.09.2013, 23:11     Вектор и его итератор #12
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Потому что итератор сам по себе не является указателем.
правильно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2013, 23:26     Вектор и его итератор
Еще ссылки по теме:

C++ Вектор и итератор
C++ Нужно создать новый вектор и сохранить его в файл
Сформировать вектор из максимумов матрицы и упорядочить его по возрастанию C++

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

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,016
Записей в блоге: 10
Завершенные тесты: 1
21.09.2013, 23:26     Вектор и его итератор #13
Цитата Сообщение от _ Посмотреть сообщение
итератор сам по себе является указателем.
Нет, это не так. Как только будет время - поясню.
Yandex
Объявления
21.09.2013, 23:26     Вектор и его итератор
Ответ Создать тему
Опции темы

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