vector< vector<int*> >* distancesMatrix=new vector< vector<int*> >;
vector<vector<Distance*> > distance(size+1, vector<Distance*>(size+1, NULL));
谢谢你的帮助
答案 0 :(得分:3)
即使对象本身在堆栈上,std::vector
也会将其数据保留在堆上。我无法想象你希望std::vector
本身在堆上的情况。这样做:
vector< vector<int> > distancesMatrix;
你已经完成了。
也就是说,围绕一维向量包围多维类可能比嵌套向量更好。
答案 1 :(得分:1)
我建议不使用矢量矢量方法有两个原因:
1)它允许结果数据呈锯齿状(即,任何两行可以是不同的长度)。如果你将它包装在一个外部接口中,或者你只是不在乎,那可能不是问题,但是:
2)“矩阵”的元素在内存中不会是连续的,由于缓存局部性,重新分配,使用额外的内存等等,这会对性能产生影响。它可能不是一个很大的影响,但它就在那里。
相反,我建议你这样做:
std::size_t size = 4; // Whatever you prefer.
std::vector<int> matrix( size * size );
然后,您可以使用以下习语访问(x,y)元素:
int element = matrix[ x + y * size ];
向量将在堆上分配其元素,它们将是连续的,这也将确保矩阵是矩形的。您可能希望将其包装在类中以提供更自然的界面。
如果你真的想把“矩阵”本身放在堆上,你可以把它作为一个指针并用新的分配它(或者更好,如果你把矢量包装到你自己的类中,比如一个称为Matrix,将 放在堆上。)
答案 2 :(得分:1)
尝试:
#include <vector>
int main()
{
// Initialize the outside vector with 20 copies of a vector that contains 20 integers that are zero initialized.
std::vector<std::vector<int> > data(20, std::vector<int>(20));
data[10][10 = 5;
}
答案 3 :(得分:-1)
尝试vector< vector<int> >(size, size)
。