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

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

???

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

Возможно. Просто пойми что при наличии гигабайтов свободной памяти ты ограничен 1 Мб или чуть больше.
26 май 21, 21:44    [22327696]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
andron81
Member

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

???

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

Возможно. Просто пойми что при наличии гигабайтов свободной памяти ты ограничен 1 Мб или чуть больше.



а как это сделать ??? )))
ну вот я попытался . и не работает.
#include <array>
#include <iostream>
const int N1 = 1;
const int N2 = 3;
const int N3 = 2;
const  int N4 = 1;
struct mystruct {
    int x;
    int y;
};
const std::array <mystruct, 2> A = { 222,777,111,555 };
const std::array <mystruct, 1> B = { 222,4444 };
const std::array <mystruct, 3> C = { 222,4444,222,4444,222,4444 };
/*
template <size_t N>
void fn(const std::array<mystruct, N>& arr, int i)
{
    std::cout << arr[i].x << std::endl;
} 
*/
template <int N>
std::array<const std::array<mystruct, N>&, 3> arrList = {A,B,C}
int main() {}
27 май 21, 08:43    [22327790]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
Dima T
Member

Откуда:
Сообщений: 15795
Извиняюсь, невнимательно прочитал вопрос.
В один массив никак не собрать std::array<mystruct, N>& с разными значениями N.
27 май 21, 08:47    [22327792]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1106
Dima T, видимо плохо сформулировал вопрос. теперь понятно.
ладно , спасибо .

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

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

Если что vector и другие динамические контейнеры тоже можно на стеке выделять (>= С++17).

#include <memory_resource>

void fun()
{
    char pool[1024];
    std::pmr::monotonic_buffer_resource resource{pool, sizeof(pool)};
    std::pmr::vector<int> v({1, 2, 3}, &resource);
    v.push_back(4);

}

Тут monotonic_buffer_resource это аллокатор который выделяет память из массива pool на стеке пока она не закончится, а потом начинает выделять из общей кучи. Так что для маленьких векторов все будет храниться на стеке.

ЗЫ. В Boost есть реализация pmr для компиляторов до C++17
27 май 21, 12:57    [22327925]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
бабушкин зайчик
Member

Откуда: сетевой
Сообщений: 205
Anatoly Moskovsky
Если что vector и другие динамические контейнеры тоже можно на стеке выделять (>= С++17).

у них же тогда должен измениться принцип работы, или как они будут динамически память выделять?
а почему pool - char?
27 май 21, 14:42    [22328006]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
Anatoly Moskovsky
Member

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

Все контейнеры в С++ поддерживают параметром аллокатор.
PMR использует эту концепцию и реализует единый класс аллокатор для всех контейнеров - std::pmr::polymorphic_allocator.
А к нему есть плагины, реализуещие интерфейс memory_resource.
monotonic_buffer_resource это один из них.
Ему даешь любой буфер и он из него выделяет память пока не кончится буфер, а потом из кучи или другого указанного ресурса.

Т.е. сам std::pmr::vector это тот же std::vector в котором параметр шаблона Allocator = polymorphic_allocator.
Принцип работы не меняестя - код тот же.
27 май 21, 14:52    [22328020]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
бабушкин зайчик
Member

Откуда: сетевой
Сообщений: 205
не тот же, аллокатор же другой... И выделяет память он стало быть по-другому
27 май 21, 20:18    [22328203]     Ответить | Цитировать Сообщить модератору
 Re: указатель на std::array  [new]
бабушкин зайчик
Member

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

???

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

технически ведь указатель на массив - это указатель на первый элемент + размер
31 май 21, 12:38    [22329261]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / C++ Ответить