forward_list迭代器不兼容
forward_list iterators incompatible
我正在尝试完成一个程序,该程序在给定x值时评估多项式。 多项式使用 STL 的forward_list存储在类的对象中。
class PolyTerm {
private:
int _order = 0;
double _coeff = 0.0;
public:
PolyTerm() = default;
PolyTerm(int order, double coefficient) : _order(order), _coeff(coefficient) {}
void setOrder(int order) { _order = order; }
void setCoeff(double coeff) { _coeff = coeff; }
int getOrder() const { return _order; }
double getCoeff() const { return _coeff; }
};
我的函数接受对象和 x 值,编写如下:
double evaluate(const forward_list<PolyTerm>& terms, double x) {
double answer = 0;
forward_list<PolyTerm>::iterator it;
while (it != terms.end()) {
answer += it->getCoeff() * pow(x, it->getOrder());
it++;
}
return answer;
}
我的编译器没有显示任何错误,但是一旦我尝试运行该程序,我就会弹出一个弹出窗口,上面写着"调试断言失败forward_list! 弹出窗口的图像 我很确定我声明了迭代器与保存多项式的列表属于同一类型,所以我不确定为什么会出现此错误。
谁能向我解释出了什么问题? 提前感谢任何帮助。
forward_list<PolyTerm>::iterator it;
它没有初始化。它必须使用转发列表的第一个元素进行初始化。
forward_list<PolyTerm>::iterator it = terms.begin();
你可以简化你的循环,你不会使用it
for (const auto& term : terms)
answer += term.getCoeff() * pow(x, term.getOrder());
你也可以使用 std::accumulate,因为这将使用函数的第三个参数强制初始化。 此外,由于不需要声明和初始化迭代器,因此您不可能忘记初始化迭代器。
下面是一个示例。 请注意,没有手写循环:
#include <numeric>
//...
double evaluate(const forward_list<PolyTerm>& terms, double x)
{
return std::accumulate(terms.begin(), terms.end(), 0.0, // <-- Note the initial value is 0.0 -- you can't miss it
[&](double total, const PolyTerm& p)
{ return total + p.getCoeff() * pow(x, p.getOrder()); });
}
你从不初始化it
.
您应该使用for
循环。
你应该使用C++11for(auto it: terms)
,因为我认为它会去。
相关文章:
- 不明白迭代器,引用和指针失效,一个例子
- 自定义 STL 兼容迭代器,用于迭代 2D 数组类的列
- 为什么某些 STL 容器(堆栈、队列、优先级队列)不支持迭代器?
- 为什么 min_element() 返回最小元素的索引,而不是迭代器?
- 我从 std::set 得到const_iterator而不是迭代器
- 为什么向量的.at()成员函数返回引用而不是迭代器
- 如果我有一个指向矢量元素的指针,而不是迭代器,如何删除它?
- 对于使用 C 样式指针矢量化的循环,但不使用迭代器
- 使用循环(而不是迭代器)从向量中删除指针
- 将指针而不是迭代器传递到std ::复制
- 如何在不使用迭代器的情况下在 C++ 中打印地图
- C++模板不接受迭代器
- 容器不可知迭代器参数
- 为什么 void* 不是迭代器类型?
- 如何在不使用迭代器的情况下访问任何向量的第 i 个元素
- 为什么在达到容量后在向量中插入时,C++不处理迭代器?
- 我可以用cout而不是迭代器循环打印STL映射吗?
- 为什么 std::bitset 不附带迭代器?
- 字符串::擦除不接受迭代器?
- 是否有一个标准容器允许在不使迭代器无效的情况下插入元素