用户输入以逗号分隔的数字对列表。
示例... 1, 1 4, 67 90, 87
OR:
30, 50
560, 70
90, 40
我必须使用这些数字填充2个向量。每对中的第一个进入第一个向量,每对中的第二个数字进入第二个向量。
我知道如何阅读矢量以及如何打印出来......
vector<int> v;
int i;
while (cin >> i)
{
v.push_back(i);
}
// print out the vector
for (auto x : v)
{
cout << x << ", ";
}
但我不确定如何填充2个载体
答案 0 :(得分:0)
如果你这样做?
vector<int> v; //vector 1
vector<int> vv; //vector 2
int i;int j;
while (cin >> i)
{
v.push_back(i);
cin >> j;
vv.push_back(j);
}
// print out the first vector
for (auto x : v)
{
cout << x << ", ";
}
// print out the second vector
for (auto y : vv)
{
cout << y << " ";
}
答案 1 :(得分:0)
我使用下面的代码制作了你想要的东西。此代码假定用户输入采用您想要的形式(number1,(space)number2),当单词&#34; over&#34;给出。每行的number1存储在名为v1的向量中,每行的number2存储在名为v2的向量中。
int main()
{
vector<string> v;
vector<int> v1;
vector<int> v2;
string inp;
do
{
cin >> inp;
v.push_back(inp);
}
while (inp.compare("over") !=0 );
for (int i=0; i<v.size(); i++)
{
if (v[i].compare("over") != 0){
if (i%2==0){
v1.push_back( atoi( v[i].c_str() ) );
} else {
v2.push_back( atoi( v[i].c_str() ) );
}
}
}
cout << "v1" << endl;
for (int i=0; i<v1.size(); i++)
{
cout << v1[i] << endl;
}
cout << "v1" << endl;
for (int i=0; i<v2.size(); i++)
{
cout << v2[i] << endl;
}
return 0;
}
答案 2 :(得分:0)
当我不得不做这样的事情时,我通常会从一个小提取操作符开始读取并验证(但忽略)分隔符:
std::istream &operator>>(std::istream &is, char const *delim) {
while (isspace((unsigned char)*delim))
++delim;
while (isspace((unsigned char)is.peek()))
is.ignore(1);
while (*delim == is.peek()) {
++delim;
is.ignore(1);
}
if ('\0' != *delim)
is.setstate(std::ios::failbit);
return is;
}
有了这个,我们可以这样做:
std::vector<int> u;
std::vector<int> v;
int a, b;
while (is >> a >> "," >> b) {
u.push_back(a);
v.push_back(b);
}
然而,我的直接倾向是考虑你正在阅读的两个值之间的关系。如果它们密切相关,那么最好创建一个结构来容纳两者,然后创建这些结构的向量(对于与上面所示类似的结构类型,重载为operator>>
)。 / p>