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