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

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

Восстановить пароль Регистрация
 
trympyrym
0 / 0 / 0
Регистрация: 13.08.2013
Сообщений: 17
02.11.2013, 20:37     как создать копию объекта, на который ссылается итератор? #1
Есть шаблонная фукнция, в которую передается итератор с произвольным доступом (IT).

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

подскажите, как сделать можно это?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Хулиган
 Аватар для Хулиган
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
366 / 265 / 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++ Создать итератор для списка

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

Или воспользуйтесь поиском по форуму:
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 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     как создать копию объекта, на который ссылается итератор?
Ответ Создать тему
Опции темы

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