我需要使用算法库中的函数查找向量元素的索引。
\n例子:
\n{1,2,3,4,5,6,7,8,9,10}
\n元素 5 在 5 位置找到。
\n#include <algorithm>\n#include <iostream>\n#include <vector>\nbool comp(int a, int b) { return a < b; }\nint main() {\n int n = 10;\n std::vector<int> a{10, 8, 5, 4, 1, 2, 3, 6, 7, 9};\n sort(a.begin(), a.begin() + n, comp);\n int number = 5;\n std::vector<int>::iterator it;\n it = std::search_n(a.begin(), a.begin() + n, number);\n if (it != a.end())\n std::cout << "found at position " << (it - a.begin()) << '\\n';\n else\n std::cout << "match not found\\n";\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n我收到错误(在第 11 行):
\n\n\n没有匹配的函数来调用 \xe2\x80\x98search_n(std::vector::iterator, __gnu_cxx::__normal_iterator >, int&)\xe2\x80\x99
\n
你能解释一下这里有什么问题吗?
\n该std::search_n函数在某个范围内查找特定值出现指定次数的序列;该数字是第三个参数(count在此 cppreference 页面上)。
因此,如果您坚持为此使用std::search_n,则需要在调用中添加一个额外的参数( count,这将是):1
it = std::search_n(a.begin(), a.begin() + n, 1, number);
Run Code Online (Sandbox Code Playgroud)
然而,search_n当寻找单一值时,使用就有点矫枉过正了。最好使用更简单(更快)的std::find功能。另外,a.begin() + n您可以使用更简单、更清晰的 来代替a.end()。
it = std::find(a.begin(), a.end(), number);
Run Code Online (Sandbox Code Playgroud)
另请注意,C++ 中的索引和迭代器位置从零开始,因此,将上述修复应用于您的代码后,答案将是“在位置 4 处找到”;如果你想要一个从 1 开始的位置,那么添加1到该位置;像这样的东西:
auto position = std::distance(a.begin(), it) + 1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3158 次 |
| 最近记录: |