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

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

Войти
Регистрация
Восстановить пароль
 
trympyrym
0 / 0 / 0
Регистрация: 13.08.2013
Сообщений: 17
#1

как создать копию объекта, на который ссылается итератор? - C++

02.11.2013, 20:37. Просмотров 365. Ответов 8
Метки нет (Все метки)

Есть шаблонная фукнция, в которую передается итератор с произвольным доступом (IT).

Необходимо внутри функци создать копию элемента *IT.

подскажите, как сделать можно это?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2013, 20:37     как создать копию объекта, на который ссылается итератор?
Посмотрите здесь:

Изменить значение элемента вектора, на который указывает итератор C++
C++ Создать копию объекта производного класса зная указатель на базовый
На что ссылается итератор после remove(*it) C++
C++ Тип на который указывает итератор
C++ Как создать копию объекта, зная его указатель?
Как изменить тип объекта, на который указывает указатель? C++
C++ Получить адрес памяти, на который ссылается указатель
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
02.11.2013, 21:21     как создать копию объекта, на который ссылается итератор? #2
....

Добавлено через 15 минут
Возможно как то так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
typedef vector<int>::iterator iter;
 
template<class T, class Val> 
void func(T arg)
{
     Val res = *arg;
     
     cout <<  res;        
    
}
 
int main()
{
   vector<int> col;
         
   col.push_back(1);
      
   iter pos = col.begin();
      
   func<iter, int>(pos);
}
trympyrym
0 / 0 / 0
Регистрация: 13.08.2013
Сообщений: 17
02.11.2013, 22:57  [ТС]     как создать копию объекта, на который ссылается итератор? #3
а нельзя ли сделать это, не добавляя ничего в template ?

хотя бы для случая, когда IT - это vectot<foo>::iterator ?
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
02.11.2013, 23:19     как создать копию объекта, на который ссылается итератор? #4
Цитата Сообщение от trympyrym Посмотреть сообщение
а нельзя ли сделать это, не добавляя ничего в template ?
ну вам же нужна была шаблонная функция, для функция параметры по умолчанию поставить нельзя...выход реализовать :

Цитата Сообщение от trympyrym Посмотреть сообщение
хотя бы для случая, когда IT - это vectot<foo>::iterator
trympyrym
0 / 0 / 0
Регистрация: 13.08.2013
Сообщений: 17
02.11.2013, 23:52  [ТС]     как создать копию объекта, на который ссылается итератор? #5
Цитата Сообщение от Хулиган Посмотреть сообщение
ну вам же нужна была шаблонная функция, для функция параметры по умолчанию поставить нельзя...выход реализовать :
Я вот что имею в виду:

есть функция:
C++
1
2
template <class Iterator>
???? function(Iterator IT1, ....)
вызывается она так:

C++
1
function<vector<foo>::iterator>(...)
Менять интерфейс функции мне крайне не рекомендуется. В функцию передаются только итераторы. Известно, что это итераторы вектора, в котором хранятся данные (неизвестного [точнее, известного, но различного при различных вызовах функции]) типа foo. Внутри функции нужно сделать копию *IT1.

Возможно ли такое?
gromo
 Аватар для gromo
367 / 266 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
03.11.2013, 00:04     как создать копию объекта, на который ссылается итератор? #6
trympyrym, как вариант в этой функции можно динамически разместить те данные, на которые указвает итератор.
То есть что-то типа
Код
func(iter_type i) {
    foo *clone = new foo(*i);
    // . . .
    return *clone;
}
нужно только чтобы foo имел вменяемый копирующий конструктор. И не потеряйте указатель clone, а то утечка)
trympyrym
0 / 0 / 0
Регистрация: 13.08.2013
Сообщений: 17
03.11.2013, 00:54  [ТС]     как создать копию объекта, на который ссылается итератор? #7
Тип foo в функцию напрямую не передается. Более того, при различных вызовах функции он различный. Поэтому так просто объявить клона не удастся.
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
03.11.2013, 01:05     как создать копию объекта, на который ссылается итератор? #8
Цитата Сообщение от trympyrym Посмотреть сообщение
Более того, при различных вызовах функции он различный
ну так берите первый вариант данной функции = можно использовать разные типы
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2013, 01:38     как создать копию объекта, на который ссылается итератор?
Еще ссылки по теме:

Двусвязный список с целыми числами - Указатель, который ссылается на предыдущий блок C++
C++ Можно ли получить копию объекта по ссылке?
Как создать копию векторного массива? C++
Как создать копию объекта на который указывает указатель C++
Узнать тип, на который указывает итератор C++

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

Или воспользуйтесь поиском по форуму:
DiffEreD
 Аватар для DiffEreD
1425 / 762 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
03.11.2013, 01:38     как создать копию объекта, на который ссылается итератор? #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <iterator>
#include <vector>
 
template<typename Iterator>
typename std::iterator_traits<Iterator>::value_type function(Iterator iter)
{
   typename std::iterator_traits<Iterator>::value_type retVal = *iter;
   return retVal;
}
 
int main()
{
   std::vector<int> v {1,2,3,4,5};
   std::cout << function(v.begin() + 2) << std::endl;
 
   return 0;
}
Yandex
Объявления
03.11.2013, 01:38     как создать копию объекта, на который ссылается итератор?
Ответ Создать тему
Опции темы

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