Есть ли в плюсах контейнер типа вектора, но
От: пффф  
Дата: 04.07.24 16:27
Оценка:
Привет

... не такой, как сразу целиком инициализируемый значениями, и не меняющий свой размер std::array.

Я хочу сказать при инстанциации шаблона такого контейнера, что у меня будет максимум N элементов, а в списке инициализации могу задать n = от 0 до N, и size() будет возвращать n, а capacity() — N, и я могу делать всякие push_*, insert, при этом, если вылезаю за capacity, то кидается исключение.

Если такого нет, почему не сделали, вроде полезная штука, нет?
Re: Есть ли в плюсах контейнер типа вектора, но
От: reversecode google
Дата: 04.07.24 16:36
Оценка:
std::inplace_vector
Re[2]: Есть ли в плюсах контейнер типа вектора, но
От: пффф  
Дата: 04.07.24 16:38
Оценка:
Здравствуйте, reversecode, Вы писали:

R>std::inplace_vector


С++23? Хм, долго же они думали

Нашел про него пропозал — https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p0843r8.html
Date: 2023-06-16 — только внесли? Т.е не факт, что и 26ом будет?

Нашел ещё fixed_capacity_vector — https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0843r0.html
Date: 2017-10-15
Его тоже до сих пор нет?

Это, кстати, разное, или об одном и том же?
Отредактировано 04.07.2024 16:52 пффф . Предыдущая версия .
Re: Есть ли в плюсах контейнер типа вектора, но
От: σ  
Дата: 04.07.24 16:53
Оценка:
П>... не такой, как сразу целиком инициализируемый значениями, и не меняющий свой размер std::array.

П>Я хочу сказать при инстанциации шаблона такого контейнера, что у меня будет максимум N элементов, а в списке инициализации могу задать n = от 0 до N, и size() будет возвращать n, а capacity() — N, и я могу делать всякие push_*, insert, при этом, если вылезаю за capacity, то кидается исключение.


П>Если такого нет, почему не сделали, вроде полезная штука, нет?


На кастомных аллокаторах вроде запросто делается, не?
Re[2]: Есть ли в плюсах контейнер типа вектора, но
От: пффф  
Дата: 04.07.24 16:54
Оценка: :)
Здравствуйте, σ, Вы писали:

П>>Если такого нет, почему не сделали, вроде полезная штука, нет?


σ>На кастомных аллокаторах вроде запросто делается, не?


Не знаю. Аллокаторы — это же про кучу, не? Не хотелось бы туда лазать
Re[3]: Есть ли в плюсах контейнер типа вектора, но
От: reversecode google
Дата: 04.07.24 16:56
Оценка: 4 (1)
Здравствуйте, пффф, Вы писали:

П>Здравствуйте, reversecode, Вы писали:


R>>std::inplace_vector


П>С++23? Хм, долго же они думали


boost static_vector
подключается парой строчек в cmake

П>Нашел про него пропозал — https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p0843r8.html

П>Date: 2023-06-16 — только внесли? Т.е не факт, что и 26ом будет?

будет в 26

П>Нашел ещё fixed_capacity_vector — https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0843r0.html

П>Date: 2017-10-15
П>Его тоже до сих пор нет?

а должен?

П>Это, кстати, разное, или об одном и том же?


хз
не все что предлагают, проходит в стандарт
Re[3]: Есть ли в плюсах контейнер типа вектора, но
От: reversecode google
Дата: 04.07.24 16:59
Оценка:
изучи уже что то новее с++98
там не много
даже в cpp ref примеры сразу для тебя добавили
раз ты учить не хочет ничего сидя на диване
Re[4]: Есть ли в плюсах контейнер типа вектора, но
От: пффф  
Дата: 05.07.24 13:51
Оценка:
Здравствуйте, reversecode, Вы писали:

R>boost static_vector

R>подключается парой строчек в cmake

Что-то не подключается
Re[5]: Есть ли в плюсах контейнер типа вектора, но
От: reversecode google
Дата: 05.07.24 14:11
Оценка:
П>Что-то не подключается

проверил, все ок
Re[6]: Есть ли в плюсах контейнер типа вектора, но
От: пффф  
Дата: 05.07.24 14:26
Оценка:
Здравствуйте, reversecode, Вы писали:


П>>Что-то не подключается


R>проверил, все ок


Показывай свой строчки
Re[7]: Есть ли в плюсах контейнер типа вектора, но
От: reversecode google
Дата: 05.07.24 14:31
Оценка: -1
П>Показывай свой строчки

у меня дежавю что это уже проходили
помнишь чем закончилось?
Re[8]: Есть ли в плюсах контейнер типа вектора, но
От: пффф  
Дата: 05.07.24 14:39
Оценка:
Здравствуйте, reversecode, Вы писали:


П>>Показывай свой строчки


R>у меня дежавю что это уже проходили

R>помнишь чем закончилось?

Не знаю, что там с кем у тебя закончилось
Re[3]: Есть ли в плюсах контейнер типа вектора, но
От: rg45 СССР  
Дата: 05.07.24 15:23
Оценка: 9 (2) +1 :)
Здравствуйте, пффф, Вы писали:

σ>>На кастомных аллокаторах вроде запросто делается, не?

П>Не знаю. Аллокаторы — это же про кучу, не? Не хотелось бы туда лазать

Да не трать ты время на этих бестолочей. Один умеет только рассказывать, как он в боях с еблером яйца себе отморозил, а другой — только надувать щеки и ставить смайлики. Все, ничего другого ты от них не добьешься.

Вот тебе примерный эскиз, как можно кастомизировать аллокатор:

http://coliru.stacked-crooked.com/a/2c20f2a8d05cf64b

#include <cassert>
#include <stdexcept>
#include <vector>
#include <iostream>

template <typename T, typename SizeLimitConstant>
class LimitedSizeAllocator;

template <typename T, size_t SizeLimit>
class LimitedSizeAllocator<T, std::integral_constant<size_t, SizeLimit>>
{
public:

   using value_type = T;

   T* allocate(size_t n){
      if (m_size + n <= SizeLimit) {
         T* p = m_allocator.allocate(n);
         m_size += n;
         return p;
      } else {
         throw std::out_of_range("Out of size limit");
      }
   }

   void deallocate(T* p, size_t n) {
      assert(m_size >= n);
      m_allocator.deallocate(p, n);
      m_size -= n;
   }

private:
   std::allocator<T> m_allocator;
   size_t m_size{};
};

template <typename T, size_t SizeLimit>
using LimitedSizeVector = std::vector<T, LimitedSizeAllocator<T, std::integral_constant<size_t, SizeLimit>>>;

int main()
{
   LimitedSizeVector<int, 3> v3 {1, 2, 3};

   for (int i : v3)
      std::cout << i << " ";

   try
   {
      v3.push_back(4);
   }
   catch (const std::out_of_range&)
   {
      std::cout << "Done" << std::endl;
   }
}
--
Re: Есть ли в плюсах контейнер типа вектора, но
От: Chorkov Россия  
Дата: 05.07.24 15:52
Оценка: 4 (1)
Здравствуйте, пффф, Вы писали:

П>Привет


П>... не такой, как сразу целиком инициализируемый значениями, и не меняющий свой размер std::array.


П>Я хочу сказать при инстанциации шаблона такого контейнера, что у меня будет максимум N элементов, а в списке инициализации могу задать n = от 0 до N, и size() будет возвращать n, а capacity() — N, и я могу делать всякие push_*, insert, при этом, если вылезаю за capacity, то кидается исключение.


П>Если такого нет, почему не сделали, вроде полезная штука, нет?


https://www.boost.org/doc/libs/1_85_0/doc/html/container/non_standard_containers.html#container.non_standard_containers.static_vector

static_vector — Все элементы в памяти, объекта как std::array
small_vector — Позволяет размещение в динамической памяти, если будет превышено заданное в шаблоне значение.
Re[4]: Есть ли в плюсах контейнер типа вектора, но
От: reversecode google
Дата: 05.07.24 15:57
Оценка: -1
только хотел подсказать std::pmr::vector
но вижу вы с марти решили сыграть сценку

когда гарри встретил ллойда

Re[5]: Есть ли в плюсах контейнер типа вектора, но
От: rg45 СССР  
Дата: 05.07.24 15:59
Оценка:
Здравствуйте, reversecode, Вы писали:

R>только хотел подсказать std::pmr::vector

R>но вижу вы с марти решили сыграть сценку
R>

R>когда гарри встретил ллойда


Ты решил проиллюстрировать сказанное мной этой тупой остротой, которую ты даже не сам придумал? Ну, спасибо за наглядное пособие.

А на C++ будет что-нибудь? Рабочий пример слабо написать? Или у тебя с С++ все еще хуже, чем с русским, поэтому стесняешься?
--
Отредактировано 05.07.2024 16:24 rg45 . Предыдущая версия . Еще …
Отредактировано 05.07.2024 16:22 rg45 . Предыдущая версия .
Отредактировано 05.07.2024 16:17 rg45 . Предыдущая версия .
Отредактировано 05.07.2024 16:09 rg45 . Предыдущая версия .
Отредактировано 05.07.2024 16:02 rg45 . Предыдущая версия .
Re[4]: Есть ли в плюсах контейнер типа вектора, но
От: пффф  
Дата: 05.07.24 16:07
Оценка:
Здравствуйте, rg45, Вы писали:

П>>Не знаю. Аллокаторы — это же про кучу, не? Не хотелось бы туда лазать


R>Да не трать ты время на этих бестолочей. Один умеет только рассказывать, как он в боях с еблером яйца себе отморозил, а другой — только надувать щеки и ставить смайлики. Все, ничего другого ты от них не добьешься.




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

Раньше я только под винду использовал с MSVC, собрал один раз бутстрап, собрал один раз буст, сделал boost.props, и его как раз одной строчкой в .vcxproj добавляю, и всё работает.

А тут приходиться пехаться с CMake и GCC, причем разных версий — GCC 7.3 для кути, GCC 13 для сборки нашего софта под винду, и GCC-ARM 13 для сборки под контроллер.

Ну, сказали одной строчкой, попробовал
set(Boost_USE_STATIC_LIBS ON) 
set(Boost_USE_MULTITHREADED ON)  
set(Boost_USE_STATIC_RUNTIME ON) 
find_package(Boost REQUIRED)


Не работает. Наверное, надо буст скачать

Скачал, наверное надо собрать под разные тулсеты? Попробовал CMake с одним — быстро вылетает по ошибке: windmc не может создать файл что-то-там/simple_log.h или как-то так. Сказал ему, что не надо мне библиотеки simple_log. В логах он пишет: собираю без библиотеки simple_log. Ок. Но потом та же ошибка.

В инете ни хрена полезного не нашел.

Ладно, решил родным b2 собрать. По дефлту он нашел gcc13 и им собрал. Ок. Теперь разбираюсь, как собрать другими компиляторами. А как потом это всё подсунуть в симейк, чтобы в итоге одной строчкой работало, пока даже не представляю.

Так что, если кто использовал буст в такой конфигурации, буду признателен за подсказки
Re[5]: Есть ли в плюсах контейнер типа вектора, но
От: rg45 СССР  
Дата: 05.07.24 16:14
Оценка:
Здравствуйте, пффф, Вы писали:


П>На самом деле, хотелось бы разобраться, как буст использовать с симейком.

П>Раньше я только под винду использовал с MSVC, собрал один раз бутстрап, собрал один раз буст, сделал boost.props, и его как раз одной строчкой в .vcxproj добавляю, и всё работает.
П>А тут приходиться пехаться с CMake и GCC, причем разных версий — GCC 7.3 для кути, GCC 13 для сборки нашего софта под винду, и GCC-ARM 13 для сборки под контроллер.

Не обессудь, здесь не подскажу. Я с CMake последний раз имел дело в 2019 году, когда помогал дочке курсовую делать. Ну там по справке все находится при желании.
--
Re[5]: Есть ли в плюсах контейнер типа вектора, но
От: пффф  
Дата: 05.07.24 17:21
Оценка:
Здравствуйте, пффф, Вы писали:

П>А тут приходиться пехаться с CMake и GCC, причем разных версий — GCC 7.3 для кути, GCC 13 для сборки нашего софта под винду, и GCC-ARM 13 для сборки под контроллер.


В общем, поковырял я буст, и пришел к выводу, что под Cortex-M его не собрать через b2, можно попробовать юзать те либы, которые чисто хидерные, и не парясь вкорячивать кусочки буста прямо в проект.

В общем, шиш, а не в одну строчку в CMake
Re[6]: Есть ли в плюсах контейнер типа вектора, но
От: reversecode google
Дата: 05.07.24 17:39
Оценка: -1
П>В общем, шиш, а не в одну строчку в CMake


потому что там не надо ничего собирать
я буст не собираю
он у меня отдельной папкой в гита каждый день апдейтиться
а в cmake где я использую около деятка его либ
у меня пару строчек

и как это сделать
написано
прикинь
в самых редми буста
но ты туда не ходи
ты сюда ходи
жалуйся
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.