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

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

Войти
Регистрация
Восстановить пароль
 
Анд_Рей
3 / 4 / 0
Регистрация: 27.12.2009
Сообщений: 162
#1

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

21.09.2013, 21:40. Просмотров 931. Ответов 12
Метки нет (Все метки)

На сколько мне известно,векторы выполняют вставку и удаление в X позицию контейнера на которую указывает его итератор: т.е. метод вставки выглядит примерно так;
C++
1
vec.insert(itr,"data");
где itr указывает на X позицию?
как заставить итератор указывать на определенную позицию в контейнере?и как это реализовать?
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2013, 21:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вектор и его итератор (C++):

Вектор и итератор с++ - C++
//////////////////// /////////// Задание: Элементы вектора D случайным образом перемешаны. Элементы ki вектора K /////////// указывают...

Вектор и итератор - C++
Почему где не смотрел всегда содержимое вектора смотрят через итераторы)) Решил попробывать как всегда стандартным проежженым способом. ...

Передать итератор на шаблонный вектор в функцию - C++
Здравствуйте. Есть два вектора std::vector<Player> players; // Player - структура с двумя полями std::vector<size_t> indices; ...

Какой должен быть итератор для константной ссылки на вектор? - C++
Есть вектор, он передается в функцию так: #include <iostream> #include <vector> using namespace std; void func(vector<int> arg)...

Итератор и его контейнер - C++
Должен ли итератор содержать в себе указатель на его контейнер? Ведь функции контейнера принимают итератор и работают с ним наверное думая...

Реализовать двусвязный список (list), итератор (iterator) и константный итератор (сonst_iterator) для списка - C++
не могу понять что должно быть результатом. может подскажете примеры? пожалуйста. Задание: Реализовать двусвязный список (list),...

12
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;
}
0
Анд_Рей
3 / 4 / 0
Регистрация: 27.12.2009
Сообщений: 162
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
если это возможно,то как перегрузить оператор <<??
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
21.09.2013, 21:59 #4
К вектору можно применять оператор subscript, т.е.:
C++
1
2
3
4
    vector <int> vi;
    ...
    cout << vi[10];
    ...
Это позволит тебе обратиться к конкретному элементу вектора без итератора.
0
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
21.09.2013, 22:07 #5
Цитата Сообщение от Анд_Рей Посмотреть сообщение
itr << 10; // itr указывает на позицию 10
больше напоминает сдвиг битов, чем перемещение итератора)
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
21.09.2013, 22:08 #6
_, это больше напоминает сдвиг битов, чем перемещение итератора ?)
Просто ты как-то не уверенно это сказал...))
0
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
21.09.2013, 22:13 #7
Цитата Сообщение от castaway Посмотреть сообщение
это больше напоминает сдвиг битов, чем перемещение итератора ?)
да) какое здесь перемещение?
Цитата Сообщение от Анд_Рей Посмотреть сообщение
itr << 10;
вообще непонятно что это означает
0
Анд_Рей
3 / 4 / 0
Регистрация: 27.12.2009
Сообщений: 162
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
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
21.09.2013, 22:39 #9
_, это перегруженный оператор, такой же как и в ostream.
0
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;
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
21.09.2013, 23:05 #11
Цитата Сообщение от _ Посмотреть сообщение
итератор сам по себе является указателем. непонятно почему нельзя узнать его адрес cout << itr;
Потому что итератор сам по себе не является указателем.
0
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
21.09.2013, 23:11 #12
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Потому что итератор сам по себе не является указателем.
правильно
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
21.09.2013, 23:26 #13
Цитата Сообщение от _ Посмотреть сообщение
итератор сам по себе является указателем.
Нет, это не так. Как только будет время - поясню.
0
21.09.2013, 23:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2013, 23:26
Привет! Вот еще темы с ответами:

Ввод string'a с консоли и запись его в вектор - C++
Здравствуйте дело в том что мне надо написать программу которая работает с строчным вектором типа string. Вроде-бы все нормально я набросал...

Нужно создать новый вектор и сохранить его в файл - C++
Добрый день Нужно создать вектор, занести туда некоторые значения и сохранить их в файл. Вот, что я сделал vector &lt;string&gt;...

Что такое вектор? И как его ввести с клавиатуры? - C++
Вести с клавиатуры целые числа M,N и вектор A=(a1,a2...an), n=15

Сформировать вектор из максимумов матрицы и упорядочить его по возрастанию - C++
Разработать алгоритм и написать программу на языке C++. Задана матрица (двумерный массив) A размером N x М , состоящая из...


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

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

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