也许这是一个非常愚蠢的问题,但是我正在阅读的书却指示我编写一段代码,该代码使用算法对向量中的元素进行加扰和排序。为此,本书告诉我使用C ++主库中的算法库。好的,到目前为止,我理解了它,但是在编写代码之后,我想看看如果我从代码的顶部删除该库会导致什么中断,令我惊讶的是一切仍然有效。
这是我正在谈论的代码。当我从代码的顶部删除“ #include算法”时,没有任何中断。怎么会这样?不使用该库时,“ random_shuffle”部分不应该中断吗?
#include <iostream> #include <vector> #include <algorithm> #include <ctime> #include <cstdlib> using namespace std; int main() { vector<int>::const_iterator iter; cout << "Creating a list of scores."; vector<int> scores; scores.push_back(1500); scores.push_back(3500); scores.push_back(7500); cout << "\nHigh Scores:\n"; for (iter = scores.begin(); iter != scores.end(); ++iter) { cout << *iter << endl; } cout << "\nFinding a score."; int score; cout << "\nEnter a score to find: "; cin >> score; iter = find(scores.begin(), scores.end(), score); if (iter != scores.end()) { cout << "Score found.\n"; } else { cout << "Score not found.\n"; } cout << "\nRandomizing scores."; srand(static_cast<unsigned int>(time(0))); random_shuffle(scores.begin(), scores.end()); cout << "\nHigh Scores:\n"; for (iter = scores.begin(); iter != scores.end(); ++iter) { cout << *iter << endl; } cout << "\nSorting scores."; sort(scores.begin(), scores.end()); cout << "\nHigh Scores:\n"; for (iter = scores.begin(); iter != scores.end(); ++iter) { cout << *iter << endl; } system("pause"); return 0; }
它起作用的原因是因为还包含了一个标头。
例如,向量可能在其源代码中包含算法。这很常见,因为它们通常仅是标头。
也就是说,您不能依赖标准库的特定实现在每个标头中具有相同的包含。(例如与可能与MSVC一起使用,而与gcc stdlibc +++可能会中断)。
由于这个原因,我强烈建议包括您使用的内容,而不管它在哪里编译。-–请注意,这与“您引用的内容”略有不同,因为在标头中对点和引用的正向声明可以显着缩短构建时间。