std::vector
не подходит для этого. std::vector
является владельцем, таким образом, если вы хотите переосмыслить память, выделенную X
как «вектор» массивов целых чисел, вы должны использовать не владеющий контейнером, например std::span
. Даже в этом случае вам придется использовать reinterpret_cast
, что рекомендуется по возможности избегать. Например:
std::span<std::array<uint32_t, 3>> points (reinterpret_cast<std::array<uint32_t, 3>*>(
X.data()), X.size()/3);
Остерегайтесь, хотя, в зависимости от количества значений в массиве std ::, в который вы преобразуетесь, вы можете столкнуться с проблемами из-за заполнения: последовательные массивы не должны касаться каждого другие в памяти.
По всем этим причинам я бы рекомендовал либо перебирать каждый третий элемент, либо предоставлять класс-оболочку вокруг X
, который инкапсулирует сильную связь semanti c между собственными данными и взгляд на это. Это также потому, что представление теперь эфемерно: его нужно пересоздавать всякий раз, когда X
перераспределяет.