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

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

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

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

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

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

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

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

Передать итератор на шаблонный вектор в функцию - 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++
Должен ли итератор содержать в себе указатель на его контейнер? Ведь функции контейнера принимают итератор и работают с ним наверное думая...

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

Сформировать вектор из максимумов матрицы и упорядочить его по возрастанию - C++
Разработать алгоритм и написать программу на языке C++. Задана матрица (двумерный массив) A размером N 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;
}
Анд_Рей
4 / 4 / 0
Регистрация: 27.12.2009
Сообщений: 157
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
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 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
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 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;
вообще непонятно что это означает
Анд_Рей
4 / 4 / 0
Регистрация: 27.12.2009
Сообщений: 157
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
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 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
~ Эврика! ~
1243 / 992 / 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++
Добрый день Нужно создать вектор, занести туда некоторые значения и сохранить их в файл. Вот, что я сделал vector &lt;string&gt;...

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

Не работает вектор структур при передачи его в функцию-ошибки - C++
Написал такой код struct lol{ }; #include &lt;vector&gt; #include &lt;windows&gt; struct smth{ } void smthfun(vector &lt;smth&gt;...

Заполнить двухмерный вектор таблицей умножения и вывести его в выходной поток - C++
Заполнить двухмерный вектор таблицей умножения и вывести его в выходной поток. То, что я написал: #include &lt;vector&gt; #include...

Заполнить двухмерный вектор таблицей умножения и выввести его в выходной поток - C++
Есть такое задание: Заполнить двухмерный вектор таблицей умножения и выввести его в выходной поток Реализовано хорошо и работает...


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

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

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