Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
3 / 4 / 1
Регистрация: 27.12.2009
Сообщений: 183
1

Вектор и его итератор

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

Author24 — интернет-сервис помощи студентам
На сколько мне известно,векторы выполняют вставку и удаление в X позицию контейнера на которую указывает его итератор: т.е. метод вставки выглядит примерно так;
C++
1
vec.insert(itr,"data");
где itr указывает на X позицию?
как заставить итератор указывать на определенную позицию в контейнере?и как это реализовать?
Спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.09.2013, 21:40
Ответы с готовыми решениями:

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

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

Итератор и массив вектор
Здравствуйте, 1)Немогу сообразить, вот есть вектор: Vector<string>massiv; massiv="0"; massiv="1"; ...

12
193 / 170 / 32
Регистрация: 09.09.2013
Сообщений: 522
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 / 1
Регистрация: 27.12.2009
Сообщений: 183
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
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
21.09.2013, 21:59 4
К вектору можно применять оператор subscript, т.е.:
C++
1
2
3
4
    vector <int> vi;
    ...
    cout << vi[10];
    ...
Это позволит тебе обратиться к конкретному элементу вектора без итератора.
0
193 / 170 / 32
Регистрация: 09.09.2013
Сообщений: 522
21.09.2013, 22:07 5
Цитата Сообщение от Анд_Рей Посмотреть сообщение
itr << 10; // itr указывает на позицию 10
больше напоминает сдвиг битов, чем перемещение итератора)
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
21.09.2013, 22:08 6
_, это больше напоминает сдвиг битов, чем перемещение итератора ?)
Просто ты как-то не уверенно это сказал...))
0
193 / 170 / 32
Регистрация: 09.09.2013
Сообщений: 522
21.09.2013, 22:13 7
Цитата Сообщение от castaway Посмотреть сообщение
это больше напоминает сдвиг битов, чем перемещение итератора ?)
да) какое здесь перемещение?
Цитата Сообщение от Анд_Рей Посмотреть сообщение
itr << 10;
вообще непонятно что это означает
0
3 / 4 / 1
Регистрация: 27.12.2009
Сообщений: 183
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
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
21.09.2013, 22:39 9
_, это перегруженный оператор, такой же как и в ostream.
0
193 / 170 / 32
Регистрация: 09.09.2013
Сообщений: 522
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
1257 / 1006 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
21.09.2013, 23:05 11
Цитата Сообщение от _ Посмотреть сообщение
итератор сам по себе является указателем. непонятно почему нельзя узнать его адрес cout << itr;
Потому что итератор сам по себе не является указателем.
0
193 / 170 / 32
Регистрация: 09.09.2013
Сообщений: 522
21.09.2013, 23:11 12
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Потому что итератор сам по себе не является указателем.
правильно
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
21.09.2013, 23:26 13
Цитата Сообщение от _ Посмотреть сообщение
итератор сам по себе является указателем.
Нет, это не так. Как только будет время - поясню.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.09.2013, 23:26
Помогаю со студенческими работами здесь

Вектор.итератор ошибка в проге
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;vector&gt; using namespace std; int main() { vector&lt;string&gt;inventory; ...

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

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

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

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


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Что нового в C# 14
UnmanagedCoder 10.03.2025
Предстоящая версия C# 14 обещает принести изменения, которые сделают разработку еще более приятной и эффективной. Что стоит отметить, так это влияние сообщества разработчиков на формирование новых. . .
Формулы поворота
Igor3D 10.03.2025
Добрый день Тема Эти формулы приводятся во множестве тьюториалов, часто под видом "матрица вращения на плоскости". x' = x * cos(a) - y * sin(a) y' = y * cos(a) + x * sin(a) Как бы Вы их. . .
Что нового в .NET 10
UnmanagedCoder 10.03.2025
. NET 10 выходит как релиз с длительной поддержкой (LTS), включающей три года обновлений. В этом обновлении Microsoft сфокусировались на нескольких направлениях: производительность, оптимизация. . .
Отложенное высвобождение, RCU и Hazard Pointer в C++26
NullReferenced 09.03.2025
Многопоточное программирование стало важной частью современной разработки. Когда несколько потоков одновременно работают с общими данными, возникает целый ряд проблем, связанных с синхронизацией и. . .
Неблокирующийся стек на C++26
NullReferenced 09.03.2025
Традиционные способы синхронизации в многопоточном программировании — мьютексы, семафоры, условные переменные — часто превращаются в узкое место в плане производительности. При этом неблокирующиеся. . .
Обработка строк в C++26: Новые возможности string и string_view
NullReferenced 09.03.2025
Новый стандарт C++26 предлагает много улучшений для работы с привычными string и относительно новыми string_view. string_view - это невладеющая ссылка на последовательность символов, появившаяся в. . .
Мой первый аддон для Blender 3D, с помощью нейронки (не зная даже азов пайтона, но это не значит что так и с остальным).
Hrethgir 09.03.2025
Потратил весь день. Пол-дня мне хватило, чтобы понять что с версией с 14B мне не одолеть написание функционального кода, на языке с которым я вообще никак не знаком - пайтон. Версия 22B от другого. . .
Einstein@Home сегодня исполняется двадцать лет!
Programma_Boinc 09.03.2025
Einstein@Home сегодня исполняется двадцать лет! Отправлено 19 февраля 2025 года в 17:20:21 UTC Я хочу поздравить всех наших волонтеров, разработчиков и ученых из Einstein@Home. Мы официально. . .
Заполнители и расширенный набор символов в C++26
NullReferenced 09.03.2025
C++26 представляет два важных обновления: заполнители и расширенный набор символов. Заполнители (placeholders) решают давнюю проблему лаконичности кода в шаблонных выражениях и лямбда-функциях. Они. . .
Контракты в C++26
NullReferenced 09.03.2025
Контракты – это механизм, позволяющий указывать предусловия, постусловия и инварианты для функций в коде. Эта функциональность должна была стать частью C++20, но была исключена на встрече комитета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru