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

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

Войти
Регистрация
Восстановить пароль
 
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,662
#1

Двумерный массив std::array. Размеры массива шаблоном - C++

14.05.2016, 17:59. Просмотров 384. Ответов 5
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <array>
#include <iostream>
 
using std::array;
using std::cout;
 
template <typename T, size_t N, size_t M>
void foo(T& arr, ...) {
    array<T, N> temp;
}
 
 
int main() {
    array<array<int, 9>, 10> arr;
    foo(arr, 9, 10);
}
Кликните здесь для просмотра всего текста

Ошибка C2783 void foo(T &,...): не удается составить аргумент шаблон для "N" 15
Ошибка C2783 void foo(T &,...): не удается составить аргумент шаблон для "M" 15
Серьезность Код Описание Строка
Ошибка (активно) отсутствуют экземпляры шаблон функции "foo", соответствующие списку аргументов 15



По аналогии со старым вариантом работы с массивом хотелось. Как это сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2016, 17:59     Двумерный массив std::array. Размеры массива шаблоном
Посмотрите здесь:

Двумерный массив <array>. const int value = array.size(); value не константа? - C++
#include &lt;array&gt; #include &lt;iostream&gt; using std::array; using std::cout; /*ФУНКЦИЯ ЗАПОЛНЕНИЯ МАССИВА ЗНАЧЕНИЯМИ*/ template...

статическая и динамическая матрица на std::array and std::vector - C++
Всем привет. Решил немного поиграться с шаблонами. Скилл чуть больше 0. Можно ли с помощью шаблонной магии подставить вместо...

Объявить двумерный символьный массив, размеры которого берутся из переменных - C++
Нужно объявить двумерный символьный массив, размеры которого берутся из переменных. Если аналогии с одномерным массивом сделатьchar **m1=...

Std::array предупреждение - C++
Всем доброго времени суток. Все работает, но вот предупреждение раздражает, что я делаю не так и как его убрать ? Растолкуйте недалекому...

Сортировка std::array - C++
Не получается реализовать сортировку контейнера array...(чтобы вся структура отсортировалась по полю third) Вот в классе объявляю.. ...

Std::array и список инициализации - C++
Помогите, плес. Как поправить? Вроде же все нармально инициализирую, но выдает ошибку, мол много инициализаторов #include &lt;iostream&gt;...

Создать матрицу из контейнера std::array - C++
Есть код: #include &lt;iostream&gt; #include &lt;array&gt; using namespace std; int main () { array &lt;int,5&gt; myarray; return...

Std::vector для Array of String - C++
Нужно поместить append первым элементом пустую Array of String. Как-нибудь по-умному это делается? :)

Присвоить значения переменных в массив Array (class Array в Turbo C++) - C++
Здравствуйте!!! Изучаю help в Turbo C++ 3.1 дошел до класса Array: main() { //при подключение соответствующих библиотек и...

Использование std::array внутри пользовательского класса - C++
Здравствуйте! Я создал класс, одним из полей которого является массив std::array, однако компилятор ругается на константу, что задаёт...

Создайте класс Array с двумя полями: указатель на массив целых чисел и размер массива - C++
. В классе хранится только указатель на массив, сами данные хранятся в динамической области памяти, выделенной оператором new. Напишите...

Дан двумерный массив, создать другой массив, строками которого будут диагонали первого массива - C++
Дан двумерный массив , создать другой массив ,строками которого будут диагонали первого массива, решить с помощью классов . Класс...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6282 / 5885 / 1906
Регистрация: 18.12.2011
Сообщений: 15,099
Завершенные тесты: 1
14.05.2016, 18:38     Двумерный массив std::array. Размеры массива шаблоном #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Нужно явно указывать N и M
C++
1
foo< array<array<int, 9>, 10>,9,10>(arr, 9, 10);
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,662
14.05.2016, 19:40  [ТС]     Двумерный массив std::array. Размеры массива шаблоном #3
C++
1
2
3
4
5
6
7
template <typename T, size_t N, size_t M>
void foo(T& arr) {
    array<T, N> temp;
    int count = 0;
 
    for (int i = 0; i<N; i++) temp[i] = count++;  //Здесь как?
}
Как с таким массивом внутри работать?
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
15.05.2016, 04:32     Двумерный массив std::array. Размеры массива шаблоном #4
Цитата Сообщение от daslex Посмотреть сообщение
Здесь как?
Что значит "как"? Если параметр шаблона Т равен int или любому типу, который можно неявно сконструировать из переменной int count — все будет работать.
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3641 / 1916 / 505
Регистрация: 18.10.2014
Сообщений: 3,480
15.05.2016, 06:25     Двумерный массив std::array. Размеры массива шаблоном #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от daslex Посмотреть сообщение
Как это сделать?
Сначала надо было бы объяснить, что именно вы пытаетесь сделать. В частности, я не совсем понимаю, эти манипуляции с типом T. Вы передаете в функцию array<array<int, 9>, 10> arr, т.е. T - это двумерный массив array<array<int, 9>, 10>. Потом внутри вы объявляете array<T, N> temp, то есть это уже массив двумерных массивов - трехмерный массив. Так и задумано? Вам нужен трехмерный массив?

Если так и задумано, то почему массивы передаются, как некое абстрактное T? Почему бы не передавать как

C++
1
2
3
4
template <typename T, size_t N, size_t M>
void foo(std::array<std::array<T, N>, M> &arr) {
  ...
}
и тогда не надо будет вручную выписывать размеры при вызове.
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,662
15.05.2016, 08:46  [ТС]     Двумерный массив std::array. Размеры массива шаблоном #6
Я понял, что получилось.

Но нет, изначально хотел двумерный массив.
Да, понял как.

C++
1
for (int i = 0; i<N; i++) temp[i][0] = count++;
Yandex
Объявления
15.05.2016, 08:46     Двумерный массив std::array. Размеры массива шаблоном
Ответ Создать тему
Опции темы

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