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

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

Войти
Регистрация
Восстановить пароль
 
daslex
1286 / 530 / 109
Регистрация: 02.08.2011
Сообщений: 2,750
#1

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

14.05.2016, 17:59. Просмотров 678. Ответов 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



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

Двумерный массив <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 разных размеров - C++
Привет форум, нужно создать двухмерный массив pair Так как все const, то решил занести в глобальные переменные потом видно будет ...

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

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

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

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

5
zss
Модератор
Эксперт С++
6580 / 6142 / 2024
Регистрация: 18.12.2011
Сообщений: 16,014
Завершенные тесты: 1
14.05.2016, 18:38 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Нужно явно указывать N и M
C++
1
foo< array<array<int, 9>, 10>,9,10>(arr, 9, 10);
1
daslex
1286 / 530 / 109
Регистрация: 02.08.2011
Сообщений: 2,750
14.05.2016, 19:40  [ТС] #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++;  //Здесь как?
}
Как с таким массивом внутри работать?
0
gromo
372 / 271 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
15.05.2016, 04:32 #4
Цитата Сообщение от daslex Посмотреть сообщение
Здесь как?
Что значит "как"? Если параметр шаблона Т равен int или любому типу, который можно неявно сконструировать из переменной int count — все будет работать.
1
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3969 / 2193 / 553
Регистрация: 18.10.2014
Сообщений: 3,802
15.05.2016, 06:25 #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) {
  ...
}
и тогда не надо будет вручную выписывать размеры при вызове.
1
daslex
1286 / 530 / 109
Регистрация: 02.08.2011
Сообщений: 2,750
15.05.2016, 08:46  [ТС] #6
Я понял, что получилось.

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

C++
1
for (int i = 0; i<N; i++) temp[i][0] = count++;
0
15.05.2016, 08:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2016, 08:46
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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