Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;如何正确使用std::find_C++_Arrays_Int_Find_Qt Creator - Fatal编程技术网

C++ C++;如何正确使用std::find

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;

我在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;
        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);