C++ c++;带ostream和istream的向量
我曾经有过一段我无法理解的代码。前提是输入一组数字:3 4 5 6 7,然后使用istream和ostream输出:4x^(3)+5x^(2)+6x^(1)+7x^(0)。我用一个向量来表示数字,我遇到的问题是向量没有正确填充 例如,如果向量称为vec1,则上述输入将给出:C++ c++;带ostream和istream的向量,c++,vector,istream,C++,Vector,Istream,我曾经有过一段我无法理解的代码。前提是输入一组数字:3 4 5 6 7,然后使用istream和ostream输出:4x^(3)+5x^(2)+6x^(1)+7x^(0)。我用一个向量来表示数字,我遇到的问题是向量没有正确填充 例如,如果向量称为vec1,则上述输入将给出: `vec1[0]==4 vec1[1]==5 vec1[2]==6 vec1[3]==4 vec1[4]==4` 但我希望它能输出: `vec1[0]==3 vec1
`vec1[0]==4
vec1[1]==5
vec1[2]==6
vec1[3]==4
vec1[4]==4`
但我希望它能输出:
`vec1[0]==3
vec1[1]==4
vec1[2]==5
vec1[3]==6
vec1[4]==7`
我找不到任何将istream与向量一起使用的示例教程,所以我希望有人能帮助我了解将istream与向量一起使用的基础知识?只要一个普通的例子就绝对好了
PS:我是C++新手,所以我很抱歉我的术语使用错误。 编辑:(这是我当前的istream代码):
istream&operator>>(istream&left,多项式&right)//输入
{
int tsize,tmp;
而(!(左>>tsize))
{
左。清除();
左。忽略();
}
如果(tsize<0)
{
tsize*=-1;
}
向量MP1;
对于(int i=0;i>tmp))
{
左。清除();
左。忽略();
}
右[i]=tmp;
}
//返回一个值
左转;
}
`
void多项式::集合多项式(vectorvec1)
{
对于(int i=0;i啊,我明白了。像这样的怎么样:
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
// A polynomial is represented as a single non-negative integer N representing
// the degree, followed by N+1 floating-point values for the coefficients in
// standard left to right order. For example:
// 3 4 5 6 7
// represents the polynomial
// 4x**3 + 5x**2 + 6x + 7
std::istream& operator >> ( std::istream& ins, Polynomial& p )
{
// You could set p to something invalid/empty here
// ...
// Get the degree of the polynomial
int degree;
ins >> degree;
if (degree < 0) ins.setstate( std::ios::failbit );
if (!ins) return ins;
// Get the polynomial's coefficients
std::vector <double> coefficients( degree + 1 );
std::copy_n(
std::istream_iterator <double> ( ins ),
degree + 1,
coefficients.begin()
);
if (!ins) return ins;
// Update p
p.setPolynomial( coefficients );
return ins;
}
#包括
#包括
#包括
#包括
//多项式表示为单个非负整数N,表示
//度,后面是中系数的N+1浮点值
//标准的从左到右顺序。例如:
// 3 4 5 6 7
//表示多项式
//4x**3+5x**2+6x+7
std::istream&operator>>(std::istream&ins、多项式和p)
{
//您可以在此处将p设置为无效/空
// ...
//得到多项式的阶数
智力度;
ins>>学位;
if(度<0)ins.setstate(标准::ios::故障位);
如果(!ins)返回ins;
//得到多项式的系数
std::向量系数(度+1);
标准::复印件(
std::istream_迭代器(ins),
学位+1,
begin()的系数
);
如果(!ins)返回ins;
//更新p
p、 集合多项式(系数);
返回ins;
}
正确命名事物会有所帮助,并确保正确循环事物。如果出现错误,输入流将正确地记录错误,除非度为负,我们需要一个特例
我使用了一些标准对象,而不是循环;您可以使用任何您觉得更方便的方法:请记住,在第一个整数值之后有N+1个双精度
最后,记住正确地使用多项式函数:如果可以使用一个向量在一次传递中设置所有系数,那么就这样做
(顺便说一句,这段代码是在我脑海中输入的,可能是打字错误和愚蠢的错误。)
编辑根据Caleth的评论进行修改。显示代码。我怀疑您有一些简单而常见的错误;对于(inti=0;i
——无需执行此操作。这就是所需的全部--向量tmp2(tsize)
您可以使用向量(size\u t)
构造函数和系数。begin()
而不是back\u inserter
,以避免在副本中重新分配
void Polynomial::setPolynomial(vector<double>vec1)
{
for (int i = 0; i < vec1.size(); i++)
polynomial.push_back(vec1[i]);
}
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
// A polynomial is represented as a single non-negative integer N representing
// the degree, followed by N+1 floating-point values for the coefficients in
// standard left to right order. For example:
// 3 4 5 6 7
// represents the polynomial
// 4x**3 + 5x**2 + 6x + 7
std::istream& operator >> ( std::istream& ins, Polynomial& p )
{
// You could set p to something invalid/empty here
// ...
// Get the degree of the polynomial
int degree;
ins >> degree;
if (degree < 0) ins.setstate( std::ios::failbit );
if (!ins) return ins;
// Get the polynomial's coefficients
std::vector <double> coefficients( degree + 1 );
std::copy_n(
std::istream_iterator <double> ( ins ),
degree + 1,
coefficients.begin()
);
if (!ins) return ins;
// Update p
p.setPolynomial( coefficients );
return ins;
}