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

Написать программу для объединения массивов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Частый путь новичка http://www.cyberforum.ru/cpp-beginners/thread1065348.html
Здравствуйте, народ! Подскажите, пожалуйста, какие-нибудь уроки по C++ для начинающих (то есть с нуля), или книгу толковую, по тому же поводу. И еще, если не влом, научите плз читать с файла и...
C++ Блок-схема помогите зделать блок схему к с++ #include <iostream> #include <cstdlib> using namespace std; int main() { int P,A; cout << "Array: "; for (int i = 0; i < 16; i++) http://www.cyberforum.ru/cpp-beginners/thread1065346.html
Наследование и шаблоны C++
Доброе время суток. Есть три класс: interface.h template <class T> class interface { public: interface(); virtual ~interface() = 0;
C++ Доступ к машине в локальной сети
Возможно ли осуществить доступ к расшаренным папкам компьютера в локальной сети программно, если при попытке сделать это руками через Компьютер->Сеть->Имя компьютера в сети, запрашивает логи и...
C++ Массивы. Найти номера тех элементов, модуль которых равен заданному числу А http://www.cyberforum.ru/cpp-beginners/thread1065316.html
Дан одномерный массив Р, который состоит из 16 элементов. Найти номера тех элементов, модуль которых равен заданному числу А. число А ввести с клавиатуры. решите пожалуста срочно надо
C++ посмотрите, не могу разобраться) #include <iostream> using namespace std; unsigned long int myFunc(unsigned long int x,unsigned long int y); int main() { unsigned long int x,y; int d; cout<<"vvedite chislo x: "; подробнее

Показать сообщение отдельно
outoftime
║XLR8║
755 / 655 / 88
Регистрация: 25.07.2009
Сообщений: 3,289
Записей в блоге: 5
08.01.2014, 11:59
MrGluck,
Кликните здесь для просмотра всего текста
помоги добить до конца так сказать:
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
27
28
29
#include <iostream>
#include <algorithm>
 
template<typename T, int N>
T* join(T **&arrays, int sizes[N])
{
    int capasity = std::accumulate(sizes, sizes + N, 0);
    T *res = new T[capasity];
 
    for (int i = 0, pos = 0; i < N;)
    {
        std::copy(arrays[i], arrays[i] + sizes[i], res + pos);
        pos += sizes[i++];
    }
 
    return res;
}
 
int main()
{
    int **arrays = new int*[3]
    {
        new int[2]{1,2},
        new int[1]{3},
        new int[3]{4,5,6}
    },
    sizes[] = {2,1,3},
    *res = join(arrays, sizes);
}
Bash
1
2
3
4
5
6
7
8
9
10
11
D:\Projects\c++\help\help\main.cpp:28:30: error: no matching function for call to 'join(int**&, int [3])'
     *res = join(arrays, sizes);
                              ^
D:\Projects\c++\help\help\main.cpp:28:30: note: candidate is:
D:\Projects\c++\help\help\main.cpp:5:4: note: template<class T, int N> T* join(T**&, int*)
 T* join(T **&arrays, int sizes[N])
    ^
D:\Projects\c++\help\help\main.cpp:5:4: note:   template argument deduction/substitution failed:
D:\Projects\c++\help\help\main.cpp:28:30: note:   couldn't deduce template parameter 'N'
     *res = join(arrays, sizes);
                              ^
Не могу понять как функцию template<class T, int N> T* join(T**&, int*) привести к виду join(int**&, int [3]), разница во втором параметре, причем я явно указываю массив а не указатель на инт, но это все равно не помогает (я эту тему не очень шарю, буду рад полезным ссылкам)

Добавлено через 4 минуты
Да, шаблон использовался для двух вещей:
- собственно шаблон
- определение размера массива

Добавлено через 16 минут

Не догнал почему, но если передать массив по ссылке, то шаблон успешно определяет его размер:
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
27
28
29
30
31
#include <iostream>
#include <algorithm>
#include <iterator>
 
template<typename T, size_t N>
T* join(T **&arrays, const int (&sizes)[N])
{
    int capasity = std::accumulate(sizes, sizes + N, 0);
    T *res = new T[capasity];
 
    for (int i = 0, pos = 0; i < N;)
    {
        std::copy(arrays[i], arrays[i] + sizes[i], res + pos);
        pos += sizes[i++];
    }
 
    return res;
}
 
int main()
{
    int **arrays = new int*[3]
    {
        new int[2]{1,2},
        new int[1]{3},
        new int[3]{4,5,6}
    },
    sizes[] = {2,1,3},
    *res = join(arrays, sizes);
    std::copy(res, res + 6, std::ostream_iterator<int>(std::cout, " "));
}
Bash
1
1 2 3 4 5 6
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru