我对C ++很陌生,只想测试C ++在下班后的速度:
只需创建一个具有100 Objectc of Object-Point(x,y-Coordinate)的矢量并将其移动到另一个矢量。重复这个k次。 (在此代码中它是1000000次 - int迭代器)。
好吧,因为我对C ++很新,你有没有看到更好的方法,或者我错过了什么?
我在Windows上运行。
Post
答案 0 :(得分:3)
考虑在堆栈上分配矢量实例,而不是在堆上,例如:
std::vector<Point>* tour = new std::vector<Point>(); std::vector<Point>* actions = new std::vector<Point>();
变成:
// std::vector default constructor creates empty vectors.
std::vector<Point> tour;
std::vector<Point> actions;
同样, not 不必要地在堆上低效地分配Point
!
Point *p = new Point((i * 10) + j,i + 1, j + 1); actions->push_back(*p);
只需做一些更简单,更有效的事情,例如:
actions.push_back(Point{x, y, z});
此外,您可以使用重载operator=
:
destVector = sourceVector;
根据您的其他评论,如果您想将内容从一个向量移动到另一个向量,您可以使用std::move()
,例如:
// Data moved from sourceVector to destVector.
// Leaves sourceVector empty.
destVector = std::move(sourceVector);
此外,如果您有编译时常量,则可以使用constexpr
:
constexpr int Constant = 10;
constexpr int Iterator = 1000000;
答案 1 :(得分:1)
我认为代码中最大的减速是你从向量的前面擦除的事实。执行此操作时,它会将每个其他元素向上移动一个位置。如果你多次这样做,你会发现你浪费了很多处理能力。
所以只需复制矢量。
while(!actions->empty()) {
tour->push_back(actions->at(0));
actions->erase(actions->begin());
}
变为
tour = actions;