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

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

Восстановить пароль Регистрация
 
mansp
18 / 18 / 0
Регистрация: 07.11.2010
Сообщений: 136
20.04.2011, 11:27     Шаблоны, "invalid iterator range" #1
написать шаблонную функцию которая копирует значения с интервала [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"
Посмотрите здесь:

std::sort(iterator, iterator, method) подскажите как исправить C++
iterator to count C++
C++ Iterator
C++ Vector iterator + offset out of range
C++ Vertor erase iterator outside range
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
20.04.2011, 11:45     Шаблоны, "invalid iterator range" #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  [ТС]     Шаблоны, "invalid iterator range" #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
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
20.04.2011, 18:01     Шаблоны, "invalid iterator range" #4
mansp, в параметре шаблона typename от class не отличается ничем.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
20.04.2011, 18:48     Шаблоны, "invalid iterator range" #5
Цитата Сообщение от mansp Посмотреть сообщение
только не могу понять что это за строчка такая?
итератор потока вывода
*it = 10
означает сделать вывести в поток 10 и добавить пробел
Yandex
Объявления
20.04.2011, 18:48     Шаблоны, "invalid iterator range"
Ответ Создать тему
Опции темы

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