为什么我的矢量大小一直重置为0?(当前使用类)
Why does my vector size keep resetting to 0? (currently using classes)
我一直在尝试创建一个多项式类,我已经完成了几乎一半。然而,在"多项式q(coeff,expo);"之后,我的向量一直重置为0,有人能告诉我为什么吗?
class polynomial {
public:
polynomial();
polynomial(vector<float> coefficient, vector<int> degree);
friend ostream& operator<<(ostream& os, const polynomial& y);
private:
vector<float> coeff1;
vector<int> expo1;
};
polynomial::polynomial(){
coeff1.clear();
expo1.clear();
coeff1.push_back(1);
}
polynomial::polynomial(vector<float> coefficient, vector<int> degree){
if (coefficient.size() != degree.size()){
cout << "Error. The number of coefficients are not the same as the number of exponents. Polynomial will be set to 1." << endl;
polynomial();
}
else {
for (int b = 0; b<degree.size(); b++) {
for (int c = 0; c<b; c++){
if (degree[b] > degree[c]){
int holder = degree[b];
degree[b] = degree[c];
degree[c] = holder;
float holder1 = coefficient[b];
coefficient[b] = coefficient[c];
coefficient[c] = holder1;
}
}
}
for (int a = 0; a<coefficient.size(); a++) {
coeff1.push_back (coefficient[a]);
expo1.push_back (degree[a]);
}
}
}
ostream& operator<<(ostream& os, const polynomial& y){
if (y.coeff1.size() != y.expo1.size()) {
os << 1;
return os;
}
else {
for (int x = 0; x<y.coeff1.size(); x++){
if (y.coeff1[x] != y.coeff1[y.coeff1.size() - 1]) {
if (y.expo1[x] == 1){
os << y.coeff1[x] << "x" << " + ";
}
else if(y.expo1[x] == 0) {
os << y.coeff1[x];
}
else {
os << y.coeff1[x] << "x^" << y.expo1[x] << " + ";
}
}
else {
if (y.expo1[x] == 1){
os << y.coeff1[x] << "x";
}
else if(y.expo1[x] == 0) {
os << y.coeff1[x];
}
}
}
return os;
}
}
int main()
{
vector<float> coeff;
vector<int> expo;
coeff.push_back(3);
coeff.push_back(16);
coeff.push_back(10);
// coeff.push_back(7);
expo.push_back(4);
expo.push_back(1);
expo.push_back(2);
expo.push_back(3);
polynomial p;
cout << "The polynomial is: " << p << endl;
polynomial q(coeff, expo);
cout << "The polynomial is: " << q << endl;
return 0;
}
[有无用的代码行,因为我想检查矢量的大小在哪里变为0]
此行:
polynomial();
创建一个未命名的对象并立即将其销毁。其效果与:相同
{
polynomial x;
}
我猜你是想"调用构造函数"。然而,这是不可能的,构造函数是特殊的,只能通过尝试创建对象来"调用";或从ctor初始值设定项列表。
我建议重新设计你的构造函数。首先,复制构造函数是伪造的(它不复制除ptr
之外的任何字段,而且int *ptr
也没有被普通构造函数初始化)。实际上int *ptr;
应该被完全移除。
在构造函数polynomial()
中,对clear()
的调用是多余的。向量一开始是空的,因为这是一个构造函数,所以它只在第一次创建的多项式上调用。
我建议构造函数使用两个参数:
polynomial::polynomial(vector<float> coefficient, vector<int> degree)
{
if (coefficient.size() != degree.size())
{
// typically it would be better to just throw an exception here, the caller will not expect a 1-polynomial
std::cerr << "Error. The number of coefficients are not the same as the number of exponents. Polynomial will be set to 1." << std::endl;
coeff1.push_back(1);
wala();
}
else
{
set_polynomial(coefficient, degree);
}
}
并将用于对系数和度数进行排序的另一个逻辑移动到一个名为set_polynomial
的私有函数中。这使您的构造函数易于阅读,代码整洁;您可能希望稍后使用此函数,以允许用户更改多项式。
专业提示:查看std::tie
,您实际上可以使用一个命令将coefficient
和degree
一起排序。
相关文章:
- 我正在尝试创建一个菜单,但我的代码一直在循环
- 我无法让我的程序工作,我一直得到未定义的符号:C
- 选择"Y"继续后,我的程序一直处于关闭状态
- 如何找出为什么我的程序一直有一个无限循环?
- C++一直跳过我的"for"循环
- 我的代码一直返回0作为文本文件中的小数数
- 如何在我的代码中修复无穷循环?我认为它跳过了第二个CIN,因此它一直在循环
- 为什么我的程序一直给我堆缓冲区溢出,即使我没有超出数组的界限或覆盖任何值
- 为什么无论我输入什么,我的时循环一直触发
- 我的bool函数一直返回true,我不知道为什么
- 我的程序一直在循环,永远不会"return 0;".是编译器不好还是代码不好?
- C - 我的循环一直添加到0
- 我一直收到一个错误,这是我第一次使用类,下面是我的代码:
- 为什么我的代码在完成之前一直返回
- 这个函数一直导致我的程序停止使用c++
- 当我移动我的精灵时,它一直从窗户掉下来
- 为什么我的矢量大小一直重置为0?(当前使用类)
- 我的方形四边目一直在奇怪地旋转,但我的其他四边目旋转得很好
- 我的priority_queue的对象一直注册为溢出
- 为什么我的函数计时器一直给出零作为输出