矢量是不可递增的错误
Vector is not incrementable error
本文关键字:错误 更新时间:2023-10-16
我正在用C++编写一个程序,实现Newton-Raphson方法等,我定义了一个多项式类:
#include <iostream>
#include <algorithm>
#include <utility>
#include <string>
#include <cmath>
#include <vector>
#include <set>
using namespace std;
class polynomial{
using pair_dd = pair<double, double>;
public:
polynomial(const vector<pair_dd>& v) : m_coeff(simplify(v)) {} // constructor
polynomial(const polynomial& p) : m_coeff(p.m_coeff){} // copy constructor
polynomial derivative() const{ // computes derivative
vector<pair_dd> dcoeff;
for_each(begin(m_coeff), end(m_coeff), [&](pair_dd p){
dcoeff.emplace_back(pair_dd(p.first*p.second, p.second - 1));
});
return polynomial(dcoeff);
}
double apply(double x) const{ // applies poly to argument
auto sum(0.0);
for_each(begin(m_coeff), end(m_coeff), [&](pair_dd p){
sum += p.first*pow(x, p.second);
});
return sum;
}
void write() const{ // prints polynomial
// function just for testing
for (const auto& term : m_coeff)
cout << term.first << "x^" << term.second << " +";
cout << endl;
}
private:
polynomial(); //forbid empty constructor
vector<pair_dd> m_coeff;
vector<pair_dd> simplify(const vector<pair_dd>& v) const{
set<double> exp; // set of exponents
for (const auto& term : v)
exp.insert(term.second);
vector<pair_dd> ret; // final simplified vector
vector<pair_dd> temp; // temporary object
for (const auto& power : exp){
copy_if(begin(v), end(v), begin(temp), [&](const pair_dd p){
return (p.second == power);
});
// combine terms
auto sum(0.0);
for (auto& p : temp)
sum += p.first;
ret.push_back(pair_dd(sum, power));
temp.clear();
}
return ret;
}
};
int main(){
vector<pair<double, double>> vec;
vec.push_back(pair<double, double>(5,1)); // 5x
vec.push_back(pair<double, double>(10, 1)); // 10x
vec.push_back(pair<double, double>(3, 2)); // 3x^2
polynomial poly(vec);
// should write 15x + 3x^2
poly.write();
return 0;
}
我遇到的问题是simplify
函数,它在运行时在copy_if
的位置出现错误。据说
矢量温度不可增加
在Visual Studio中。我的算法的工作方式是将所有具有相同x幂的项收集在一个集合中(因为我们只想要唯一的元素)。随后,我迭代指数集,使用成对向量上的copy_if
将具有相同指数的所有项分组在一起,然后将其组合并放入最终向量中。
我已经尝试了保留和调整临时向量的大小。
copy_if
不会分配内存,它假设temp
已经达到大小,但事实并非如此。您可以使用<iterator>
中的std::back_inserter
。
copy_if(begin(v), end(v), back_inserter(temp), [&](const pair_dd p){
return (p.second == power);
});
您正试图复制到一个空向量中,您需要首先调整其大小,或者使用一个根据需要调整大小的插入器:
copy_if(begin(v), end(v), back_inserter(temp), [&](const pair_dd p){
return (p.second == power);
});
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 错误:未在此范围内声明'reverse'