Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 указатель на std::array  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1106
есть функция которая хотелось бы чтобы принимала в качестве одного из параметров указатель на массивы разной размерности вида :
const std::array < mystruct,N> где mystruct эта моя простенькая структура , а вот N у таких массивов разный.

вопрос можно ли объявить тип значение которого указатель на const std::array < mystruct,N>

Сообщение было отредактировано: 26 май 21, 11:32
26 май 21, 11:39    [22327328]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
Dima T
Member

Откуда:
Сообщений: 15795
std::vector<mystruct> не подойдет?

Если нет, то объявляй свою функцию через шаблоны.
26 май 21, 12:42    [22327383]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1106
Dima T
std::vector<mystruct> не подойдет?

Если нет, то объявляй свою функцию через шаблоны.


вектор не пойдет. не хочу динамическую аллокацию. Шаблоны - да . Но тут их надо с параметром . я пока затрудняюсь, почитаю, если что ещё спрошу.
26 май 21, 12:54    [22327394]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
Dima T
Member

Откуда:
Сообщений: 15795
andron81
вектор не пойдет. не хочу динамическую аллокацию.

Если std::array на стэке размещается, то будь осторожен, стэк всего 1 Мб, выйти за пределы элементарно.
andron81
Шаблоны - да . Но тут их надо с параметром . я пока затрудняюсь, почитаю, если что ещё спрошу.

Параметром будет размер (N).

Сообщение было отредактировано: 26 май 21, 13:23
26 май 21, 13:29    [22327419]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
бабушкин зайчик
Member

Откуда: сетевой
Сообщений: 205
Dima T
стэк всего 1 Мб

это на винде? Linux ulimit -s показывает 8192

Сообщение было отредактировано: 26 май 21, 13:41
26 май 21, 13:49    [22327439]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6658
andron81,

template <size_t N>
void fn(const std::array<mystruct, N>& arr)
{
}


Надо только помнить что тело шаблона должно быть в хедере, а не в .cpp (если это не локальная функция используемая только в этом .cpp файле)
26 май 21, 14:02    [22327461]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
Dima T
Member

Откуда:
Сообщений: 15795
бабушкин зайчик
Dima T
стэк всего 1 Мб

это на винде? Linux ulimit -s показывает 8192

В виндавсе размер стэка при компиляции задается. В MSVC по умолчанию 1 Мб.
8 Мб не намного лучше, тоже легко переполнить.
26 май 21, 14:04    [22327462]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1106
Anatoly Moskovsky
andron81,

template <size_t N>
void fn(const std::array<mystruct, N>& arr)
{
}


Надо только помнить что тело шаблона должно быть в хедере, а не в .cpp (если это не локальная функция используемая только в этом .cpp файле)


здорово ! спасибо. в шаблонах я вообще нулевой .
26 май 21, 14:12    [22327473]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1106
Dima T
andron81
вектор не пойдет. не хочу динамическую аллокацию.

Если std::array на стэке размещается, то будь осторожен, стэк всего 1 Мб, выйти за пределы элементарно.


то есть у нас ограничения по количеству элементов в массиве ?

Сообщение было отредактировано: 26 май 21, 14:17
26 май 21, 14:19    [22327476]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
petrav
Member

Откуда:
Сообщений: 2944
Anatoly Moskovsky
andron81,

template <size_t N>
void fn(const std::array<mystruct, N>& arr)
{
}


Надо только помнить что тело шаблона должно быть в хедере, а не в .cpp (если это не локальная функция используемая только в этом .cpp файле)

Ещё это может быть закрытый метод класса, объявленный в .h, а реализованный в .cpp.
26 май 21, 14:34    [22327487]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
Dima T
Member

Откуда:
Сообщений: 15795
andron81
Dima T
пропущено...

Если std::array на стэке размещается, то будь осторожен, стэк всего 1 Мб, выйти за пределы элементарно.


то есть у нас ограничения по количеству элементов в массиве ?

Да, но не в одном массиве, а во всех вместе. Будешь гуглить - не путай с std::stack<>, читай про стек потока
26 май 21, 14:43    [22327493]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
AmKad
Member

Откуда:
Сообщений: 5297
Если уж писать шаблонную функцию, работающую со множеством, то делать ее сигнатуру в стиле STL: [begin; end). Такое решение позволит отложить выбор статической/динамической аллокации на более поздний этап.

Сообщение было отредактировано: 26 май 21, 14:50
26 май 21, 14:52    [22327500]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1106
Dima T
andron81
пропущено...


то есть у нас ограничения по количеству элементов в массиве ?

Да, но не в одном массиве, а во всех вместе. Будешь гуглить - не путай с std::stack<>, читай про стек потока


что не путать ? структуру данных стек и область памяти стек где хранятся переменные друг за другом ?
26 май 21, 15:01    [22327504]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
Dima T
Member

Откуда:
Сообщений: 15795
andron81
Dima T
пропущено...

Да, но не в одном массиве, а во всех вместе. Будешь гуглить - не путай с std::stack<>, читай про стек потока


что не путать ? структуру данных стек и область памяти стек где хранятся переменные друг за другом ?

Да. Они одним и тем же словом называются.
26 май 21, 15:05    [22327506]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
alex_k
Member

Откуда: krasnoyarsk
Сообщений: 6690
andron81,

строго говоря - тут речь про ограничение размера стэка потока, а не про ограничение количества элементов в контэйнере "стэк".

количество элементов в контэйнере ограничено типом size_t и в настоящий момент можно считать это ограничение бесконечно большим :)
26 май 21, 15:09    [22327509]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
AmKad
Member

Откуда:
Сообщений: 5297
Раз уж мы пустились в обсуждения "стека", позвольте и мне вставить свои три копейки: std::stack - это абстракция, которая ничего не говорит о структуре хранения. Она лишь определяет набор операций с элементами множества.
26 май 21, 15:15    [22327512]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1106
AmKad,

ну да . можно и свой класс "стэк" намутить с обычным массивом в качестве контейнера .
26 май 21, 15:22    [22327517]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1106
Скажите , а можно всё же каким-то образом массив объявить и определить из таких указателей на такие массивы std::array < mystruct,N>

???

или это уже невозможно ?
26 май 21, 16:36    [22327554]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8256
andron81
Скажите , а можно всё же каким-то образом массив объявить и определить из таких указателей на такие массивы std::array < mystruct,N>

???

или это уже невозможно ?
все перешли на вектор.
26 май 21, 16:54    [22327569]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1106
PetroNotC Sharp,

Ну да. Таких проблем бы не было. И шаблоны не нужны
26 май 21, 16:58    [22327571]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
petrav
Member

Откуда:
Сообщений: 2944
andron81
Скажите , а можно всё же каким-то образом массив объявить и определить из таких указателей на такие массивы std::array < mystruct,N>

???

или это уже невозможно ?

Уточните вопрос. Ерунду же написали.

Воспринимайте std::array как средство оптимизации. Да, со своими ограничениями. Но такой оптимизации нет в
C# или Ява.
26 май 21, 17:16    [22327581]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8256
andron81
PetroNotC Sharp,
Ну да. Таких проблем бы не было. И шаблоны не нужны

Либо статика либо динамика. А смешивать не всегда хорошо.
26 май 21, 17:16    [22327582]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1106
petrav

Уточните вопрос. Ерунду же написали.
.


По первичному вопросу ответ был получен. Вощникла ла новая мысль. Для этого надо ответить на вопрос можно ли каким то образом
Определить массив из вот таких массивов :

std::array < mystruct,N>
26 май 21, 17:28    [22327588]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
бабушкин зайчик
Member

Откуда: сетевой
Сообщений: 205
можно конечно
array<Circle, 10> a2;
и даже так можно
array<string, n> aa;
26 май 21, 17:35    [22327593]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
petrav
Member

Откуда:
Сообщений: 2944
andron81
petrav

Уточните вопрос. Ерунду же написали.
.


По первичному вопросу ответ был получен. Вощникла ла новая мысль. Для этого надо ответить на вопрос можно ли каким то образом
Определить массив из вот таких массивов :

std::array < mystruct,N>

Можно. Как и с любым другим типом элемента массива.

А по первичному вопросу могу предложить следующее:

void doItInner(int *, size_t);

template <size_t N>
void doIt(std::array<int, N> &arr)
{
    doItInner(arr.data(), N);
}


doItInner() можно будет разместить в .cpp. Это, конечно, компромисс...
26 май 21, 17:36    [22327594]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / C++ Ответить