Как мне добиться следующего:
std::vector<int> vec = { 1, 2, 3 };
const int N = vec.size();
// Now create NxN 2D array.
Во-первых, я знаю, что могу сделать это с new
, но мне придется не забыть удалить его позже, и я бы предпочел не обрабатывать освобождение памяти, если это возможно.
Во-вторых, я не могу объявить 2D-массив в стеке, потому что N не является (и не может быть в данном случае) постоянным выражением. (В любом случае я использую VS2013, и он не поддерживает constexpr
.)
В-третьих, я не могу (или, может быть, не знаю, как) использовать std::array
, потому что, очевидно, «локальная переменная не может использоваться как аргумент, не являющийся типом». (Я скопировал это из диалога компиляции VS2013 и мало что понимаю по этому поводу).
В-четвертых, я подумываю использовать unique_ptr
. Проблема в том, что я знаю, как использовать unique_ptr
для одномерного массива, например std::unique_ptr<int> arr{ new int[N] }
, но не могу понять, как это сделать для 2D-массива.
Наконец, я знаю, что всегда могу написать свою собственную тонкую оболочку вокруг массива в стиле C, который всегда создается в куче, или написать свой собственный класс 2D-массива. Но есть ли в C ++ (C ++ 11) собственный или стандартный библиотечный способ сделать это?
int& operator()(size_t row, size_t col);
для доступа к 2-му элементу. - person juanchopanza   schedule 06.04.2015I'd rather have a 2D array rather than a 2D vector.
Почему? Есть ли у вас дополнительные требования, которые вы не упомянули, которым вектор векторов не удовлетворяет? - person Igor Tandetnik   schedule 06.04.2015std::vector
s. Мне все еще интересно посмотреть, есть ли простое решение с массивами, хотя так я узнаю больше о C ++. - person Ray   schedule 06.04.2015operator[](size_t i, size_t j)
, но он не работает, потому что он не определяет этот оператор или преобразование в тип, приемлемый для предопределенного оператора. Я не совсем понимаю это, но есть ли способ заставить индексацию работать с[]
вместо()
? - person Ray   schedule 06.04.2015operator[]
может принимать только один индекс, поэтому вы застряли сoperator()(size_t row, size_t col);
. Думаю, это нормально. - person juanchopanza   schedule 06.04.2015