我想做的是重载Book类的>>运算符,以在一行中从用户那里获取未知数量的整数。之后,我需要创建一个数组。
我尝试过:
istream& operator>>( istream& in, Book& b )
{
int x;
delete[] b.editionYears;
b.editionNo = 0;
b.editionYears = new int[0];
cin>>x;
b.addEdition(x);
return in;
}
我用
称呼它cout << A << endl;
在测试类中,其中A是Book对象。
我尝试过,但是在这里,当用户输入“ 1 2 3 4”之类的内容时,它只会删除该数组并向其中添加1,在第二个调用中它会再次删除1并添加2。
我期望的是,如果用户输入“ 1 2 3 4”,则应删除editionYears数组,再次创建并向其中添加1,2,3,4。
那我该怎么做呢?感谢您的帮助。
答案 0 :(得分:1)
考虑使用std::vector
而不是动态分配的数组。有多种方法可以做到这一点。您可以要求用户输入要输入的整数数,可以要求用户在输入完成后输入-1
之类的数字,也可以要求用户在一行中输入所有整数,然后将其读取到stringstream
中,然后转换为int
s并将push_back转换为向量。前两种方法实现起来很简单,因此这里是第三种方法的示例实现:
#include <iostream>
#include <vector>
#include <sstream>
int main()
{
std::vector<int> vec;
std::cout << "please enter numbers in a line" << std::endl;
std::string line;
std::getline(std::cin, line);
std::istringstream ss(line);
int i;
while (ss >> i)
{
vec.push_back(i);
}
return 0;
}
答案 1 :(得分:1)
您的问题是使用cin
。尝试使用std::getline
。
这个其他答案可能会帮助https://stackoverflow.com/a/5838803/5355195