Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.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++_Stdvector_C++ Standard Library - Fatal编程技术网

C++ 向量和函数练习

C++ 向量和函数练习,c++,stdvector,c++-standard-library,C++,Stdvector,C++ Standard Library,我有一个关于这个项目的问题。我是初学者,当涉及到编程和C++时,我试着找出两件事。 为什么这个程序没有编译(错误:使用未初始化的内存“total”-我把它定义为一个变量??) 有人能解释一下主(sumUpTo)之外的函数是如何工作的吗?特别是&vec和total,因为我以前从未见过它们。谢谢 /*1)将用户输入的数字读入向量-完成 2) 包括提示用户选择停止输入数字-完成 3) 询问用户他们希望从向量求和多少num- 4) 打印向量中第一个(如用户选择3个)元素的总和*/ #包括 #包括 #

我有一个关于这个项目的问题。我是初学者,当涉及到编程和C++时,我试着找出两件事。
  • 为什么这个程序没有编译(错误:使用未初始化的内存“total”-我把它定义为一个变量??)

  • 有人能解释一下主(
    sumUpTo
    )之外的函数是如何工作的吗?特别是
    &vec
    total
    ,因为我以前从未见过它们。谢谢

  • /*1)将用户输入的数字读入向量-完成
    2) 包括提示用户选择停止输入数字-完成
    3) 询问用户他们希望从向量求和多少num-
    4) 打印向量中第一个(如用户选择3个)元素的总和*/
    #包括
    #包括
    #包括
    #包括//用于累计
    整数汇总(常数标准::向量和向量,常数标准::大小总和)
    {
    如果(总计>向量大小())
    返回std::accumulate(vec.begin(),vec.end(),0);
    返回std::累计(vec.begin(),vec.begin()+总计,0);
    }
    int main()
    {
    std::向量nums;
    int userInput,n,总计;
    std::cout(用户输入){
    如果(userInput='|'){
    break;//如果输入为|,则停止循环。
    }
    push_back(userInput);//将userInput推回到nums向量中。
    }
    std::cout代码中的错误-
    
    • int userInput,n,总计;
      .
      .
      .
      std::cout vec.size())
      )。但是,由于您在声明时从未对其进行初始化,也没有在代码中的任何位置为其赋值,编译器不知道如何进行比较,因为
      total
      没有任何值


    有人能解释一下主功能之外的功能(sumUpTo)是如何工作的吗 有效?特别是“&vec”和“总计”

    sumUpTo
    声明为-
    int sumUpTo(const std::vector&vec,const std::size\u t total)

    在这里,您希望函数将整数向量作为参数。但是您可能对vec之前的
    &
    有疑问。该符号只是指定您将要,而不是通过制作向量的完整副本。在我们的常规传递中,传递给函数的向量将作为原始向量的副本传递但在这种情况下,向量作为引用传递,而不是原始向量的副本

    请注意我使用了术语reference而不是指针。如果你来自C语言背景,你可能会觉得两者都是一样的,在某些情况下,它们的功能可能有点类似,但没有什么不同(一些很好的答案,所以-,)在它们之间,您可以在线阅读许多有用的资源。请理解,在这种情况下,当向量传递给函数时,它会阻止复制向量。如果函数声明没有提到该参数为
    const
    ,您还可以对向量进行更改,这也会反映在最初的一个也一样(如果你正常地传递它而不是作为引用,他们就不会这样做)

    std::size_t
    是一种用于以字节表示对象大小的类型。它是一种无符号数据类型,在处理对象大小时使用。如果您不确定
    std::size_t
    int
    (这是您可能期望的总数)

    最后,很明显,函数中使用了
    const
    ,以确保传递给函数的参数不会在函数中被修改。

    代码中存在错误-
    • int userInput,n,总计;
      .
      .
      .
      std::cout vec.size())
      )。但是,由于您在声明时从未对其进行初始化,也没有在代码中的任何位置为其赋值,编译器不知道如何进行比较,因为
      total
      没有任何值


    有人能解释一下主功能之外的功能(sumUpTo)是如何工作的吗 有效?特别是“&vec”和“总计”

    sumUpTo
    声明为-
    int sumUpTo(const std::vector&vec,const std::size\u t total)

    在这里,您希望函数将整数向量作为参数。但是您可能对vec之前的
    &
    有疑问。该符号只是指定您将要,而不是通过制作向量的完整副本。在我们的常规传递中,传递给函数的向量将作为原始向量的副本传递但在这种情况下,向量作为引用传递,而不是原始向量的副本

    请注意我使用了术语reference而不是指针。如果你来自C语言背景,你可能会觉得两者都是一样的,在某些情况下,它们的功能可能有点类似,但没有什么不同(一些很好的答案,所以-,)在它们之间,您可以在线阅读许多有用的资源。请理解,在这种情况下,当向量传递给函数时,它会阻止复制向量。如果函数声明没有提到该参数为
    const
    ,您还可以对向量进行更改,这也会反映在最初的一个也一样(如果你正常地传递它而不是作为引用,他们就不会这样做)

    std::size_t
    是一种用于以字节表示对象大小的类型。它是一种无符号数据类型,在处理对象大小时使用。如果您不确定
    std::size_t
    int
    (这是您可能期望的总数)

    最后,很明显,函数中使用了
    const
    ,以确保参数t
    /* 1) read in numbers from user input, into vector    -DONE
        2) Include a prompt for user to choose to stop inputting numbers - DONE
        3) ask user how many nums they want to sum from vector -
        4) print the sum of the first (e.g. 3 if user chooses) elements in vector.*/
    
    #include <iostream>
    #include <string>
    #include <vector>
    #include <numeric> //for accumulate
    
    int sumUpTo(const std::vector<int>& vec, const std::size_t total)
    {
        if (total > vec.size())
            return std::accumulate(vec.begin(), vec.end(), 0);
    
        return std::accumulate(vec.begin(), vec.begin() + total, 0);
    }
    
    int main()
    {
    
        std::vector<int> nums;
        int userInput, n, total;
    
        std::cout << "Please enter some numbers (press '|' to stop input) " << std::endl;
        while (std::cin >> userInput) {
    
            if (userInput == '|') {
                break; //stops the loop if the input is |.
            }
    
            nums.push_back(userInput); //push back userInput into nums vector.
        }
    
        std::cout << "How many numbers do you want to sum from the vector (the numbers you inputted) ? " << std::endl;
        std::cout << sumUpTo(nums, total);
    
        return 0;
    }
    
    int userInput, n, total;
    .
    .
    .
     std::cout << sumUpTo(nums, total);