C++ 踩坑记录(持续更新!)
有人说你永远不能自称精通 C++,本文试图为这个观点提供一个例证。下面列出了一些从去年(2024)开始我编写 C++ 代码时犯过的错误。当然,有些可能看上去很蠢,不过谁又能在未知全貌的时候保证自己不会犯错呢?我认为这些错误至少初看上去是反直觉的。 std 集合操作只能用于有序容器 你要表示两个整数集合,所以你用了 std::unordered_set<int>。之后你想要求两个集合的交集,你搜了一下 STL,发现 std::set_intersection 似乎正合适。于是你写了一个简单的程序 // test_set.cpp std::unordered_set<int> set1 = {1, 2, 3, 4, 5}; std::unordered_set<int> set2 = {4, 5, 6, 7, 8}; std::unordered_set<int> result; std::set_intersection(set1.begin(), set1.end(), set2.begin(), set2.end(), std::inserter(result, result.begin())); for (const auto &elem : result) { std::cout << elem << " "; } std::cout << std::endl; 然后运行,你期望输出的结果是 4 5 或是 5 4(毕竟你很严谨)。可是实际结果呢 $ clang++ test_set.cpp -o test_set $ ./test_set 什么都没有输出。 正如 std::set 实际上表示的是有序集合一样,std::set_intersection 实际上也是 ordered_set_intersection,只不过函数签名并不告诉你。...