【发布时间】:2012-10-10 01:47:49
【问题描述】:
我正在这里制作一个解决这个问题的程序:http://opc.iarcs.org.in/index.php/problems/BOOKLIST
我使用向量的唯一地方是:
for(int i =0;i < total_books; i++){
int temp;
cin >> temp;
books_order.push_back(temp);
}
和
for(int i = 0;i < total_entries; i++){
int index;
cin >> index;
index--;
cout << books_order[index] << endl;
books_order.erase(books_order.begin()+index);
}
(这是我的完整代码:http://cpaste.org/1377/)
我在向量中使用的唯一函数是vector::erase、vector::push_back 和vector::begin。 对于大型输入,我的代码花费的时间超过 3 秒(这是该问题的时间限制),但是当我删除向量函数时,它运行得更快(但当然给出了错误的答案)
我知道在这个问题中使用向量是错误的,我的算法很慢,但我不明白为什么它很慢。
如果您知道为什么我使用的功能很慢,请向我解释。 谢谢。
【问题讨论】:
-
任何编程语言都可能被滥用......这不是向量的错。
-
std::vector 实际上是一个数组,当需要更多空间时移动到新数组。如果您的向量必须以非常高的速度扩展,请尝试使用链接列表。
-
您要解决的实际问题是什么?我不愿再鼓励使用此代码,但也许您会对不同的解决方案感兴趣。
-
我看不出你的代码是如何解决这个问题的。问题中没有书籍,您确定链接正确吗?要解决您链接到的问题,您可能需要
std::make_heap、std::push_heap、std::pop_heap。 -
问题链接和代码无关。那将是第一个问题。我要指出的是,您需要一种更适合您的问题的不同数据结构,但事实是首先您需要了解您需要解决的问题:)