一般来说,拥有原始 拥有指针并不是一个好主意(除非在特殊情况下,例如当您定义一些自定义的高性能高度专业化的数据结构时)。
在您的代码中 - 除非您处于特殊情况 - 在现代 C++11/14 中,不应显式调用 new 和 delete。
您的代码示例风格看起来更像 Java 和其他基于垃圾收集的基于引用语义的语言风格。相反,C++ 更倾向于值语义(例如,更喜欢:MyClass x; 到 MyClass * px = new MyClass();,如果你真的需要一些 拥有 指针,请使用 智能指针 喜欢std::shared_ptr 或std::unique_ptr):
// Your original code:
//
// std::vector<float*> *v;
// v = new std::vector<float*>;
//
// Not good, since:
//
// 1. You have a std::vector of owning pointers
// (std::vector<float *>)
//
// 2. You have a raw owning pointer for the containing std::vector itself
// (v = new std::vector<....>)
//
编写代码的更现代和正确的方法是使用vectors 的vector(而不是原始拥有指针float* 的vector):
//
// Vector of vectors (i.e. 2D matrix), allocated on the stack
// Note: no raw owning pointers here.
//
vector<vector<float>> v;
然后您可以使用std::vector::push_back() 或其他一些std::vector 方法来填充向量。
作为 2D 矩阵的更高性能和更少开销的替代方案,您可以使用单个 1D std::vector,并将 2D 矩阵的内容线性化单个 一维连续向量,大小为Rows * Columns,例如:
vector<float> matrix;
matrix.resize( Rows * Columns );
要访问位置 (rowIndex, columnIndex) 的元素,您可以使用这样的公式(如果您按行存储矩阵元素,即 row#1、row#2 em>, ..., row#N):
indexInVector = columnIndex + rowIndex * Columns;
所有这些都可以很好地包装在类模板template <typename T> class Matrix {...}; 中,具有读写矩阵元素的适当方法,并包含std::vector<T> 作为数据成员。