我对以下案件有疑问; 假设我想定义一个向量矢量来确定一组元素,我可以添加数据,并可以使用那些元素来计算其他东西。然后我不再需要那个矢量了。然后,假设我想要将另一组数据作为向量的向量,那么我可以重用先前创建的变量,然后;
(1)如果我将矢量矢量创建为动态存储器并删除为
vector<vector<double> > *myvector = new vector<vecctor<double> >;
//do push back and use it
delete myvector;
然后重新使用
(2)如果我将矢量矢量简单地创建为
vector<vector<double> > myvector;
//do push back and use it
myvector.clear();
然后重新使用
但是,我想在这两种方法中,尽管我们已经删除了很少的内存。所以,我想知道确定这个向量矢量的有效方法是什么。
(3)如果内部向量的大小总是2,那么它是否仍然有效使用 矢量矢量通过定义
vector<vector<double> > myvector(my_list.size(), vector<double>(2))
,而不是其他容器类型
(4)如果我使用预定义的另一个类来保存2个元素,然后将这些对象类型的向量作为(例如XY是可以容纳2个元素的类,可以作为数组)
vector<XY>;
我希望,请有人评论我最有效的方法(从1-4)所需的速度和内存。有没有更好的方法,plz也建议我。感谢
答案 0 :(得分:2)
如果您只需要两个元素,最有效的方法可能是:
std::vector<std::tr1::array<double, 2>> myvector;
// or std::vector<std::pair<double, double>> myvector;
// use it
myvector.clear(); // This will not deallocate any memory, so what has alrdy been allocated will be used for future push_backs
答案 1 :(得分:0)
如果这是家庭作业(或不是)并且您想知道哪个更快,那么您应该尝试:在循环中运行“推回并清除”或“新建并删除”几百万次并执行时间。我怀疑2.会更快一点。
你说你想要容纳一组元素,并且内部向量的大小是2。 这有点模棱两可,但你可以进一步研究两件事: 1. std :: pair,如果你的“元素”包含2个其他“东西” 2. std :: map,如果你想根据另一个“元素”的值引用“元素”