визуальный вектор C ++ массива чисел с плавающей точкой

Почему эта сборка не происходит в VS 2010 C ++?

typedef float test[10];
std::vector<test> test_me(100); // wanted initial capacity of 100

Пока это строит нормально

typedef float test[10];
std::vector<test> test_me_now;

2

Решение

Массивы не являются ни копируемыми, ни перемещаемыми. std::vector требует по крайней мере одного из них для большинства операций. Или, по крайней мере, операции, которые включают в себя фактическое помещение вещей в вектор. Поскольку конструктор по умолчанию ничего не помещает в вектор, проблем с ним нет.

Неприличное поведение встроенных массивов — вот почему std::array было изобретено.

6

Другие решения

это

std::vector<test> test_me(100);

будет пытаться вызвать конструктор по умолчанию test, test(), которого не существует Если вы хотите увеличить емкость, в отличие от вектора с 100 элементы, попробуйте

std::vector<test> test_me_now;
test_me_now.reserve(100);

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

4

23.1 / 3, кажется, довольно ясно об этом:

Тип объектов, хранящихся в этих компонентах, должен соответствовать
требования типов CopyConstructible (20.1.3) и дополнительные
требования Назначаемых типов.

Массивы в стиле C не являются ни CopyConstructible, ни Assignable, поэтому их нельзя хранить в контейнерах. Предположительно это означает, что вы вошли в область неопределенного поведения, поэтому компилятор может делать все, что ему нравится в обоих случаях.

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector