从C ++ For Everyone练习P6.07:编写一个在vector<int> append(vector<int> a, vector<int> b)
之后追加b
的函数a
实施例。 a is 1 4 9 16
和b is 9 7 4 9 11
然后返回1 4 9 16 9 7 4 9 11
我的功能
vector<int> append(vector<int> a, vector<int> b)
{
vector<int> appended;
for (unsigned int i = 0; i < a.size(); i++)
{
appended.push_back(a[i]);
}
for (unsigned int i = 0; i < b.size(); i++)
{
appended.push_back(b[i]);
}
return appended;
}
我的一次尝试:
int main()
{
cout << "Enter some numbers: ";
int input, input2;
vector<int> a, b;
while (cin >> input)
{
if (cin.fail())
{
cout << "Enter some numbers: ";
while (cin >> input2)
{
if (cin.fail()) {break;}
else {b.push_back(input2);}
}
}
else {a.push_back(input);}
}
return 0;
}
运行cin
函数时,如何使用a
获取向量b
和main()
?
答案 0 :(得分:3)
如果您希望在失败后再次使用它,则需要清除std::cin
的错误标记。
至于追加,为什么不预约和插入?
void append(std::vector<int>& a, const std::vector<int>& b)
{
a.reserve(a.size() + b.size());
a.insert(a.end(), b.begin(), b.end());
}
答案 1 :(得分:1)
你问两个问题:我如何追加两个向量,以及如何输入两组数字。
至于第一个,我会像其他人描述的那样使用std::vector::insert
。至于第二种,我有两种选择。
您可以使用标记值(-1,例如,如果所有其他数字都是正数),以指示第一个列表的结尾。如果这不是一个选项,您可以在一行而不是多行读取第一组数字。
以下是两个执行您要执行的操作的程序。
首先,使用-1作为标记值的程序:
#include <iostream>
using std::cin;
using std::cout;
#include <iterator>
using std::ostream_iterator;
#include <vector>
using std::vector;
int main()
{
int i;
vector<int> v1;
while(cin >> i) {
if(i == -1)
break;
v1.push_back(i);
}
vector<int> v2;
while(cin >> i)
v2.push_back(i);
v1.insert(v1.end(), v2.begin(), v2.end());
copy(v1.begin(), v1.end(), ostream_iterator<int>(cout, ", "));
}
接下来,一个程序从一行读取第一组数字,从下一行读取第二组数字:
#include <iostream>
using std::cin;
using std::cout;
using std::getline;
using std::ostream;
using std::istream;
#include <sstream>
using std::stringstream;
#include <iterator>
using std::ostream_iterator;
#include <vector>
using std::vector;
#include <string>
using std::string;
vector<int>
fetch(ostream& os, istream& is)
{
vector<int> result;
os << "Enter several values, all one one line:\n";
string line;
getline(is, line);
stringstream sline(line);
int i;
while(sline >> i)
result.push_back(i);
return result;
}
int main()
{
vector<int> v1(fetch(cout, cin));
vector<int> v2(fetch(cout, cin));
v1.insert(v1.end(), v2.begin(), v2.end());
copy(v1.begin(), v1.end(), ostream_iterator<int>(cout, ", "));
cout << "\n";
}
答案 2 :(得分:0)
这不是答案,但我想指出一个有趣的事情:
while (cin >> input)
{
if (cin.fail())
//...
}
if
内部while
没有任何意义。如果cin>>input
失败,则循环将在执行if
之前中断。
这意味着,代码中的while
块已缩减为:
while (cin >> input)
{
a.push_back(input);
}
这相当于您的while
阻止!