矢量优化 - 简单方法

时间:2011-06-05 10:36:16

标签: c++ optimization vector

我对以下案件有疑问; 假设我想定义一个向量矢量来确定一组元素,我可以添加数据,并可以使用那些元素来计算其他东西。然后我不再需要那个矢量了。然后,假设我想要将另一组数据作为向量的向量,那么我可以重用先前创建的变量,然后;

(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也建议我。感谢

2 个答案:

答案 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,如果你想根据另一个“元素”的值引用“元素”