[英]C++ Calling Vectors from Function to Main
我正在嘗試將大量值讀入特定函數中的向量,然后將其調用到main中以獲得平均值。 我的readInput工作得很好。 但我相信當我輸入<< values.size();時,我的main函數返回0。 為什么是這樣? 我該怎么做才能改變它?
using namespace std;
//function prototype
int readInput(vector<int> vect);
int main()
{
vector<int> values;
int sum, avg;
sum = readInput(values);
//cout << sum;
avg = sum / values.size();
cout << avg;
return 0;
}
int readInput(vector<int> vect)
{
int count;
int total = 0;
ifstream inputFile("TopicFin.txt"); //open file
if(!inputFile)
{
return 0; // if file is not found, return 0
}
while(inputFile >> count) //read file
vect.push_back(count); //add to file
for (int count = 0; count < vect.size(); count++)
total+=vect[count]; //sum data in vector
return total;
}
您沒有通過引用傳遞矢量,因此您的函數僅將值存儲在main中矢量的副本中。
int readInput(vector<int>& vect);
這告訴你的程序通過引用傳遞向量意味着函數中修改的任何東西直接在main中修改你的向量。 如果你對這個東西不熟悉,請查看這篇文章,解釋參考和復制之間的區別。
您需要將向量作為引用或指針傳遞。 該函數只是創建當前通過值傳遞的向量的副本,並對其進行操作。
將功能簽名更改為。 。 。
int readInput(vector<int>& vect)
或者(對於這個例子,可能更奇怪)。 ..
int readInput(vector<int> *vect)
也改變了函數調用
sum = readInput(&values);
雖然其他人已經提到過通過引用傳遞向量的可能性,但這不是我認為在這種情況下我會做的。 我想我只是從函數中返回向量。 我還將文件名傳遞給函數:
std::vector<int> values = readInput("TopicFin.txt");
至少對我而言,這似乎更好地反映了意圖。 也許我只是有點慢,但從名稱來看似乎並不明顯, readInput
的返回值將是它讀取的值的總和。
雖然返回一個向量理論上可能導致編譯器既不支持移動構造也不支持返回值優化的效率問題,但是任何這樣的編譯器都非常保證是如此古老,以至於你真的想要出於其他原因而避免使用它。
至於將數據讀入向量,我會使用一對istream_iterator
:
std::vector<int> data{std::istream_iterator<int>(infile),
std::istream_iterator<int>()};
當然,考慮到這是多么簡單,我傾向於想知道是否值得擁有像readInput
這樣的單獨函數。
要對這些值求和,我會使用std::accumulate
:
int total = std::accumulate(data.begin(), data.end(), 0);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.