我有一个用结构填充 STL 链表的程序,我试图从列表上的一个节点(我目前通过迭代器使用的节点)传递结构成员。我想要完成的一件事是计算运行平均值的函数。我不想将计数和总数存储在结构中,然后在输出时计算平均值,而是将计数和平均值存储在结构中,从而在重新计算平均值后丢弃我的数量值。我的结构如下所示:
struct mystruct
{
string item;
long avg;
short count;
} data;
这些结构存储在一个带有迭代器的列表中it
,它允许我在列表中移动。如果我遍历了列表并且it
等于我想要计算平均值的数据的节点,这是否是调用我的平均函数的正确方法?
// prior to running the code below, the `count` and `avg` members for the
// struct at iterator location `it` are both 1 and 100 respectively
long qty = 50;
calc_average(it->count, it->avg, qty);
cout << "The current count is " << it->count << endl;
// Outputs 'The current count is 2'
cout << "The current average is " << it->avg << endl;
// Outputs 'The current average is 75'
void calc_average(short &count, long &avg, long quant)
{
avg = ( (avg * count) + quant ) / (count + 1);
count++;
}
这看起来正确吗?我正在尝试使用 STL 列表来实现这一点,但它似乎比仅仅实现我自己的链表类更令人困惑。我想我只是对结构以及迭代器的实际工作方式以及实际传递的内容/方式感到困惑。编码对我来说仍然相当新,所以这是一个学习过程......
谢谢!