gpt4 book ai didi

c++ - 如何通过将 vector 元素传递给函数来更改 vector 元素

转载 作者:行者123 更新时间:2023-11-27 23:36:30 24 4
gpt4 key购买 nike

我马上要参加 C++ 考试,所以我决定通过编写一个随机程序来学习,该程序将实现迄今为止在类(class)中涵盖的大部分 Material 。我想出的是一个程序,它从输入文件中读取数值数据,将其复制到 vector 中,通过一些自定义函数执行一些计算,将 vector 从最低值排序到最高值,并在标准输出中显示数据。

一切正常,除了排序功能。我似乎无法弄清楚如何更改 vector 的值。运行程序时, vector 元素保持原来的顺序。我很确定我需要引用 vector 以使函数能够更改实际数据,但我不知道如何正确地这样做。

这是代码(它需要一个名为“input.txt”的文件才能工作):

https://pastebin.com/5Q8GP3mY

#include <iomanip>
#include <iostream>
#include <fstream>
#include <string>
#include <vector>

using namespace std;
void icountSumAvg(vector<double>, int, int &icount, double &sum, double &avg);
void display(int, double, double);
void display(int, double, double, vector<double>, int);
void swap(vector<double>, int);

int main()
{
ifstream ifile;
const string FILENAME = "input.txt";
ifile.open(FILENAME);
int count = 0;
double sum = 0, avg = 0;
if (!(ifile.fail()))
{
bool testSwap = true; // displays each element if true
vector<double> vect;
double value = 0.0;
while (!ifile.eof())
{
ifile >> value;
vect.push_back(value);
}
int vectSize = vect.size();

icountSumAvg(vect, vectSize, count, sum, avg);

if (testSwap == true)
{
swap(vect, vectSize);
display(count, sum, avg, vect, vectSize);
}
else
display(count, sum, avg);

ifile.close();
}
else
cout << "There was an error opening the file: " << FILENAME << endl;
system("pause");
}

void icountSumAvg(vector<double> values, int size, int &icount, double &sum, double &avg)
{
for (int i = 0; i < size; i++)
{
icount++;
sum += values[i];
}
avg = sum / icount;
}

void swap(vector<double> values, int size)
{
double temp;
for (int i = 0; i < size; i++)
{
for (int j = 0; j < i; j++)
{
if (values[j] < values[i])
{
temp = values[i];
values[i] = values[j];
values[j] = temp;
}
}
}
}

void display(int count, double sum, double avg, vector<double> values, int size)
{
for (int i = 0; i < size; i++)
{
cout << "Element " << i + 1 << ": " << values[i] << endl;
}
cout <<"Total count: " << count << endl
<< "Total sum: " << sum << endl
<< "Average of numbers: " << avg << endl;
}

void display(int count, double sum, double avg)
{
cout <<"Total count: " << count << endl
<< "Total sum: " << sum << endl
<< "Average of numbers: " << avg << endl;
}

最佳答案

你的 swap() 函数只是修改复制到函数的 vector 。通过引用 swap() 函数发送 vector 以获得所需的效果。这也将避免额外的复制。

因为 icountSumAvg() 和 display() 不应该修改 vector 参数,所以也像这样将它们声明为常量引用:

void swap(vector<double>&, int);
void icountSumAvg(const vector<double>&, int, int &icount, double &sum, double &avg);
void display(int, double, double, const vector<double>&, int);

关于c++ - 如何通过将 vector 元素传递给函数来更改 vector 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58849850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com