2015-10-01 5 views
0

Я хотел бы сохранить 2-мерный массив, используя vector<float*>. float* будет назначен функцией fread. Но он не может получить размер float внутри, за исключением использования vector<vector<float>>. Я не хочу использовать vector<vector<float>>, потому что ему нужно преобразовать из массива в vector. Итак, любые другие лучшие методы?Как получить размер массива при использовании вектора <float*>

+1

«.Я не хочу использовать вектор <вектор < float >>, потому что нужно конвертировать из массива в векторе.» - Можете ли вы подробнее рассказать о последней части? –

ответ

0

Поскольку вы не хотите использовать vector<vector<float>>, один из вариантов - создать свой собственный тип данных.

struct MyArray 
{ 
    std::vector<float*> array; 
    size_t cols; 
}; 

Это предполагает, что не берет на себя ответственность за выделения и освобождения памяти о float* с.

array.size() равно числу строк и предполагается, что каждый элемент array провести cols количество float с.

+0

Зачем изобретать вектор, в несколько искалеченной форме? –

3

Использование vector<vector<float>>. Одним из требований вектора является то, что элементы хранятся условно. Упомянутый более формально (от http://en.cppreference.com/w/cpp/container/vector):

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

Это означает, что вы можете сделать что-то вроде этого:

vector<float> x{1.0, 2.0}; 
float *x1 = &x[0]; 
+2

Мой хрустальный шар говорит мне, что OP хочет сделать 'std :: fread (x.data(), sizeof (float), n, fp)', что прекрасно, если 'x.size()> = n' , – 5gon12eder

+0

@ 5gon12eder Хороший звонок. –

Смежные вопросы