向量和函数练习
Vectors and Functions exercise
我有一个关于这个程序的问题。我是编程和 C++ 的初学者,我想弄清楚两件事。
为什么这个程序不能编译(错误:使用未初始化的内存'total' - 我把它定义为一个变量??)。
谁能解释一下 main (sumUpTo
) 之外的函数是如何工作的?特别是 & vec
和 total
,因为我以前从未见过它们。谢谢
/* 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);
这里声明了 total
并直接将其用作 sumUpTo
函数的参数。在该函数中,您在比较中使用它 ( if (total > vec.size())
)。但是,由于您从未在声明时初始化它,也没有在代码中的任何地方为其分配任何值,因此编译器不知道如何进行比较,因为 total
没有任何值.
could someone explain how the function outside of main (sumUpTo)
works? Specifically '& vec' and 'total'
sumUpTo
声明为 - int sumUpTo(const std::vector<int>& vec, const std::size_t total)
.
在这里,您期望函数将整数向量作为参数。但是您可能对 vec 之前的 &
有疑问。该符号仅指定您将要 pass the vector as a reference 而不是通过制作矢量的完整副本。在我们的常规传递中,传递给函数的向量将作为原始向量的副本传递。但在这种情况下,矢量将作为参考传递,而不是原始矢量的副本。
请注意,我使用的是术语参考,而不是指针。如果您来自 C 背景,您可能会觉得两者是相同的,并且在某些情况下,它们的功能可能有点相似但几乎没有区别(SO 上的一些好答案 - 1, 2, 3 ) 在它们之间,您可以阅读许多在线可用的好资源。只需了解,在这种情况下,它会阻止在将向量传递给函数时复制向量。如果函数声明没有提到该参数为 const
,您还可以对向量进行更改,这也将反映在原始向量中(如果您正常传递它们则不会,而是比作为参考)。
std::size_t
是一种类型,用于以字节为单位表示对象的大小。它是一种无符号数据类型,只要您处理对象的大小时就会使用它。如果您不确定 std::size_t
和 int
之间的区别(这可能是您一直期望的总数),您也可以参考 this。
最后,很明显函数中使用了 const
以确保我们传递给函数的参数不会在函数中被修改。
我有一个关于这个程序的问题。我是编程和 C++ 的初学者,我想弄清楚两件事。
为什么这个程序不能编译(错误:使用未初始化的内存'total' - 我把它定义为一个变量??)。
谁能解释一下 main (
sumUpTo
) 之外的函数是如何工作的?特别是& vec
和total
,因为我以前从未见过它们。谢谢
/* 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);
这里声明了
total
并直接将其用作sumUpTo
函数的参数。在该函数中,您在比较中使用它 (if (total > vec.size())
)。但是,由于您从未在声明时初始化它,也没有在代码中的任何地方为其分配任何值,因此编译器不知道如何进行比较,因为total
没有任何值.
could someone explain how the function outside of main (sumUpTo) works? Specifically '& vec' and 'total'
sumUpTo
声明为 - int sumUpTo(const std::vector<int>& vec, const std::size_t total)
.
在这里,您期望函数将整数向量作为参数。但是您可能对 vec 之前的 &
有疑问。该符号仅指定您将要 pass the vector as a reference 而不是通过制作矢量的完整副本。在我们的常规传递中,传递给函数的向量将作为原始向量的副本传递。但在这种情况下,矢量将作为参考传递,而不是原始矢量的副本。
请注意,我使用的是术语参考,而不是指针。如果您来自 C 背景,您可能会觉得两者是相同的,并且在某些情况下,它们的功能可能有点相似但几乎没有区别(SO 上的一些好答案 - 1, 2, 3 ) 在它们之间,您可以阅读许多在线可用的好资源。只需了解,在这种情况下,它会阻止在将向量传递给函数时复制向量。如果函数声明没有提到该参数为 const
,您还可以对向量进行更改,这也将反映在原始向量中(如果您正常传递它们则不会,而是比作为参考)。
std::size_t
是一种类型,用于以字节为单位表示对象的大小。它是一种无符号数据类型,只要您处理对象的大小时就会使用它。如果您不确定 std::size_t
和 int
之间的区别(这可能是您一直期望的总数),您也可以参考 this。
最后,很明显函数中使用了 const
以确保我们传递给函数的参数不会在函数中被修改。