Правильный способ работы с вектором массивов

c++ arrays vector stdvector

107281 просмотра

4 ответа

Может кто-нибудь сказать, как правильно работать с вектором массивов?

Я объявил вектор массивов ( vector<float[4]>), но получил error: conversion from 'int' to non-scalar type 'float [4]' requestedпри попытке к resizeнему. Что не так?

Автор: Pulkit Sinha Источник Размещён: 12.11.2019 09:14

Ответы (4)


116 плюса

Решение

Вы не можете хранить массивы в vectorили любом другом контейнере. Тип элементов, которые должны храниться в контейнере (называемый типом значения контейнера ), должен быть как копируемым, так и назначаемым. Массивы не являются ни.

Однако вы можете использовать arrayшаблон класса, например, предоставляемый Boost, TR1 и C ++ 0x:

std::vector<std::array<double, 4> >

(Вы хотите заменить std::arrayс std::tr1::arrayиспользовать шаблон , включенный в C ++ TR1, или boost::arrayиспользовать шаблон из библиотек буста Кроме того , вы можете написать свой собственный,. Это довольно просто.)

Автор: James McNellis Размещён: 06.01.2011 06:18

9 плюса

Использование:

vector<vector<float>> vecArray; //both dimensions are open!
Автор: Nawaz Размещён: 06.01.2011 06:15

8 плюса

В следующем фрагменте кода нет ошибки:

float arr[4];
arr[0] = 6.28;
arr[1] = 2.50;
arr[2] = 9.73;
arr[3] = 4.364;
std::vector<float*> vec = std::vector<float*>();
vec.push_back(arr);
float* ptr = vec.front();
for (int i = 0; i < 3; i++)
    printf("%g\n", ptr[i]);

ВЫХОД ЭТО:

6,28

2.5

9,73

4,364

В ЗАКЛЮЧЕНИЕ:

std::vector<double*>

это еще одна возможность, кроме

std::vector<std::array<double, 4>>

что Джеймс Макнеллис предложил.

Автор: user2133061 Размещён: 06.10.2014 11:37

5 плюса

Каждый элемент вашего вектора является a float[4], поэтому при изменении размера каждый элемент должен по умолчанию инициализироваться из a float[4]. Я так понимаю, вы пытались инициализировать intзначением вроде 0?

Пытаться:

static float zeros[4] = {0.0, 0.0, 0.0, 0.0};
myvector.resize(newsize, zeros);
Автор: Mark Ransom Размещён: 06.01.2011 06:17
Вопросы из категории :
32x32