我如何实现以下目标:
std::vector<int> vec = { 1, 2, 3 };
const int N = vec.size();
// Now create NxN 2D array.
首先,我知道我可以做到new
但我必须记得稍后删除它,如果可能的话,我宁愿不必处理内存释放。
其次,我不能在堆栈上声明二维数组,因为 N 不是(在这种情况下也不能是)常量表达式。(无论如何我使用的是 VS2013,它不支持constexpr
。)
第三,我不能(或者可能不知道如何)使用std::array
,因为显然“局部变量不能用作非类型参数”。(我从 VS2013 编译对话中复制粘贴了这个,对这一点知之甚少)。
第四,我正在考虑使用unique_ptr
. 问题是,我知道怎么用unique_ptr
用于一维数组,例如std::unique_ptr<int> arr{ new int[N] }
,但不知道如何为二维数组执行此操作。
最后,我知道我总是可以围绕始终在堆上创建的 C 样式数组编写自己的瘦包装器,或者编写自己的 2D 数组类。但是在 C++ (C++11) 中是否有本机或标准库方式来执行此操作?