C++ C++;如何正确使用std::find
我在www.cplusplus.com上有一篇文章问了一个问题,到底是关于算法库中的哪个函数。这是我的密码 randnum.cpp中的代码:C++ C++;如何正确使用std::find,c++,arrays,int,find,qt-creator,C++,Arrays,Int,Find,Qt Creator,我在www.cplusplus.com上有一篇文章问了一个问题,到底是关于算法库中的哪个函数。这是我的密码 randnum.cpp中的代码: #include "randnum.h" void randNum (char timeATM) { int *p, newRandNum; srand (timeATM); for (int i = 0; i < 4; i++) { newRandNum = rand() % 10;
#include "randnum.h"
void randNum (char timeATM)
{
int *p, newRandNum;
srand (timeATM);
for (int i = 0; i < 4; i++)
{
newRandNum = rand() % 10;
p = std::find(randNums, randNums + 4, newRandNum);
if (p != randNums + 4)
{
std::cout << "!found! at " << i + 1 << "| num " << *p << std::endl;
i = i - 1;
}
else
{
randNums[i] = Nums[newRandNum];
std::cout << "all ok; at " << i + 1 << "| num " << randNums[i] << std::endl;
}
}
}
#包括“randnum.h”
void randNum(char timeATM)
{
int*p,newRandNum;
srand(timeATM);
对于(int i=0;i<4;i++)
{
newRandNum=rand()%10;
p=std::find(randNums,randNums+4,newRandNum);
如果(p!=randNums+4)
{
std::cout您正在使用的std::find
函数有3个参数:
指向序列开头的指针(迭代器)
指向序列末尾(最后一个插槽+1)的指针(迭代器)
要找到的价值
您所述的示例:
std::find(randNums,randNums+4,newRandNum);
正在从以下位置搜索:
序列的开头(randNums
),
序列的结尾(randNums+4
)或开头后的4个位置,
对于值newRandNum
还可以搜索:指针算术、迭代器加法。您可以使用-1初始化randNum列表。参考:
首先,最后
将迭代器输入序列中的初始和最终位置。搜索范围为[first,last],其中包含第一个和最后一个之间的所有元素,包括first指向的元素,但不包括last指向的元素。
我可能弄错了,但我有一种预感,这是最后一部分(粗体),让你有点困惑。最后一个位置是排他性的,所以不会被搜索
因此,对于4元素数组:
要搜索元素0、1、2和3,需要[0,4]的范围(请注意paren,而不是括号-分别为排除和包含)
编辑以添加:至于第二部分-这只是一个初始化问题,我想您的int[4]是用4个零创建的
如果要避免这种情况,您必须跟踪已加载的内容,并且只搜索有效范围。当然,如果您遵循,您的第一个rand()将需要设置为[0]
搜索的范围是[first,last],它包含first和last之间的所有元素,包括first指向的元素,但不包括last指向的元素。-
最后是在数组中搜索标准std::find
函数中的值的元素数,如:
std::find(randNums, randNums + 4, newRandNum);
这里指定的范围是从randNums
中的第一个元素到randNums+4-1
。这意味着将在randNums
的开始和randNums+3
之间搜索值newrandnums
,包括这两个值。找到了第二个问题的答案。我应该设置randNums的值S的内容与0—9的不同。我们在阅读链接方面有一些问题。除了CPLUS PLUS,你的C++书籍也会有一个描述:<代码> STD::查找< /C>。如果你根本无法理解这个解释,你认为你在这里得到的任何解释会对你更容易理解吗?关于std::find
的描述及其参数,您需要准确解释您不清楚的地方。@NeilButterworth至少链接工作正常,如果您有任何想法或在评论部分没有向我们展示您有多聪明,请回答问题。@SamVarshavchik我的问题i关于我在问题中写的第二个参数。@XTard——这些链接的问题(现在通过实际发布代码更正)链接可能不是永久性的,因此这个问题对将来链接到这个线程的人来说毫无用处。它不是上升到:randNums+3
?@ABusyProgrammer:结尾总是最后一个位置的后面。因此序列的结尾是randNums+4
。序列是randNums[0]
通过randNums[3]
包括在内,因为randNums[4]
已经过了最后一个搜索时段。@Thomas Matthews也明白了你的意思,真的很喜欢你的解释。非常清楚。谢谢你的回答。祝你愉快:)@一位忙碌的程序员也明白了你的意思。谢谢你的回答。祝你愉快:)
std::find(randNums, randNums + 4, newRandNum);