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

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

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

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

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

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

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

подскажите, как сделать можно это?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2013, 20:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос как создать копию объекта, на который ссылается итератор? (C++):

Как создать копию объекта на который указывает указатель - C++
У меня есть указатель класс Student, который хранит информацию о студентах(имя, фамилию, телефон) в строках в стиле Си, то есть private...

Как создать копию объекта, зная его указатель? - C++
Здравствуйте, существует следующая проблема. В своей программе я рисую график используя класс QwtPolarPlot. По нажатию на график, должно...

На что ссылается итератор после remove(*it) - C++
Здравствуйте! Не понимаю, почему итератор ссылается на удаленный из списка элемент? #include <vcl> #include <iostream> #include...

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

Получить адрес памяти, на который ссылается указатель - C++
Изучаю указатели, появился такой вопрос: int *b = new int(5); Как получить адрес памяти, на который ссылается указатель b? То есть...

Скопировать объект, на который ссылается указатель на абстрактный класс - C++
Доброго времени суток. У меня такое задание: написать программу символьного дифференцирования, т.е. пользователь пишет функцию f(x), а...

8
Хулиган
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);
}
0
trympyrym
0 / 0 / 0
Регистрация: 13.08.2013
Сообщений: 17
02.11.2013, 22:57  [ТС] #3
а нельзя ли сделать это, не добавляя ничего в template ?

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

Цитата Сообщение от trympyrym Посмотреть сообщение
хотя бы для случая, когда IT - это vectot<foo>::iterator
0
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.

Возможно ли такое?
0
gromo
370 / 269 / 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, а то утечка)
0
trympyrym
0 / 0 / 0
Регистрация: 13.08.2013
Сообщений: 17
03.11.2013, 00:54  [ТС] #7
Тип foo в функцию напрямую не передается. Более того, при различных вызовах функции он различный. Поэтому так просто объявить клона не удастся.
0
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
03.11.2013, 01:05 #8
Цитата Сообщение от trympyrym Посмотреть сообщение
Более того, при различных вызовах функции он различный
ну так берите первый вариант данной функции = можно использовать разные типы
0
DiffEreD
1430 / 767 / 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;
}
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2013, 01:38
Привет! Вот еще темы с ответами:

Как создать копию векторного массива? - C++
То есть... у меня есть векторный массив. Я хочу создать еще один векторный массив точно такой же как тот. Можно ли сразу приравнять массивы...

Двусвязный список с целыми числами - Указатель, который ссылается на предыдущий блок - C++
Всем здравствуйте, сразу прошу прощения за тему, которых и так навалом в нете. Я перечитал уйму информации по созданию и не могу понять с...

Тип на который указывает итератор - C++
Как в функции узнать тип на который указывает итератор не используя auto и boost::iterator_value?#include &lt;iostream&gt; #include &lt;vector&gt; ...

Узнать тип, на который указывает итератор - C++
Всем привет! Вот например у меня есть такой код: vector&lt;double&gt; objInt2; objInt2.push_back(1); objInt2.push_back(2); ...


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

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
03.11.2013, 01:38
Ответ Создать тему
Опции темы

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