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

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

Войти
Регистрация
Восстановить пароль
 
mansp
18 / 18 / 0
Регистрация: 07.11.2010
Сообщений: 136
#1

Шаблоны, "invalid iterator range" - C++

20.04.2011, 11:27. Просмотров 560. Ответов 4
Метки нет (Все метки)

написать шаблонную функцию которая копирует значения с интервала [begin, end) в интервал что начинаетса с dst

функцию написал
C++
1
2
3
4
5
template<typename T> void copy(T* dst, const T* begin, const T* end)
{
        for(int i =0 ; (begin + i) < end ; i++)
            dst[i] = begin[i];
}
C++
1
2
3
4
5
6
template<typename T> void rand_arr( T* data,  int size)
{
    for (int i=0; i<size; i++ )
        data[i] = (T)((rand()%255) +1);
 
}
в мейне
C++
1
2
3
4
5
6
int size = 10;
    int *m = new int [size];
    int *n = new int[size];
rand_arr(m,size);
 
    copy(n,m,m+10);
при запуске програмы когда компилятор доходит до функции копи возникает ошибка invalid iterator range
где я накосячил?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2011, 11:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблоны, "invalid iterator range" (C++):

Шаблоны. Плохо понимаемые моменты из книги "Шаблоны С++. Справочник разработчика". (Вандевурд, Джосаттис) - C++
Так как изучаю эту книгу, то в некоторых местах возникают вопросы. Чтобы не плодить много тем, корни у которых одни, решил создать эту...

Ошибки: "invalid use of non-static data member", "error: from this location" - C++
Здравствуйте. Помогите пожалуйста понять в чём я не прав. Почему компилятор не даёт объявить указатель на структуру и почему я не могу...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Ошибка при запуске программы "vector iterator not incrementable" - C++
при запуске программы (без разницы какой функции) вылетает ошибка (заг. темы) как это исправить? мне кажется, что проблема в том, что я...

Ошибка "iterator not dereferencable" при использовании ссылки - C++
Всем привет. Без ссылки все работает, с ссылкой ошибка: &quot;iterator not dereferencable&quot;. С ссылкой: void func(vector&lt;string&gt;&amp; arr) ...

Исправить ошибку "Vector iterator not dereferancable" - C++
Всех с наступающим Новым Годом! У меня возникла проблема с вот этой функцией (я пытаюсь реализовать алгоритмы stl, чтобы лучше в них...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
20.04.2011, 11: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
#include <cstdlib>
#include <algorithm>
#include <iterator>
#include <iostream>
 
template<class T_in, class T_out> void copy(T_out dst, T_in begin, T_in end)
{
  for( ; begin != end ; ) *dst++ = *begin++;
}
 
template<typename T> void rand_arr( T* data,  int size)
{
        for (int i=0; i<size; i++ )
                data[i] = (T)((rand()%255) +1);
 
}
 
int main(){
        int size = 10;
        int *m = new int [size];
        int *n = new int[size];
        rand_arr(m,size);
        copy(n,m,m+10);
        std::ostream_iterator<int> it( std::cout, " " ); 
        copy( it, m, m+10 );
}
mansp
18 / 18 / 0
Регистрация: 07.11.2010
Сообщений: 136
20.04.2011, 15:31  [ТС] #3
странно у меня вылетает вот такое окно,
http://saveimg.ru/pictures/20-04-11/...f330183cee.png
сейчас попробую ваш вариант

Добавлено через 6 минут
Ваш код работает,
только не могу понять что это за строчка такая?
Код
 std::ostream_iterator<int> it( std::cout, " " );
Добавлено через 1 час 10 минут
и ещо чем отличаетса
Код
template<class .... от
template<typename.....
?

Добавлено через 2 часа 6 минут
с итераторами я немного уже понял...
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
20.04.2011, 18:01 #4
mansp, в параметре шаблона typename от class не отличается ничем.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
20.04.2011, 18:48 #5
Цитата Сообщение от mansp Посмотреть сообщение
только не могу понять что это за строчка такая?
итератор потока вывода
*it = 10
означает сделать вывести в поток 10 и добавить пробел
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2011, 18:48
Привет! Вот еще темы с ответами:

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

Выдает ошибку invalid conversion from "int*" to "int" - C++
Добрый вечер! Что за ошибка?invalid conversion from &quot;int*&quot; to &quot;int&quot; #include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;string&gt; ...

Почему выдает ошибку в строке "for(Data::iterator p=stats.begin(); p!=stats.end(); ++p)" - C++
&quot;Read a sequence of possibly whitespaceseparated (name,value) pairs, where the name is a single whitespaceseparated word and the value is...

Генератор Кроссвордов выдает ошибку "Vector subscript out of range" - C++
Написал программу для курсовой, смысл в том что программа создает кроссворд из заданных слов в заданной сетке, однако при запуске выдают...


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

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

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