附加向量 练习P.07从C++中为大家写一个函数向量附加(vector a,vector b)< /> > b>代码> < < /p>

附加向量 练习P.07从C++中为大家写一个函数向量附加(vector a,vector b)< /> > b>代码> < < /p>,c++,vector,append,std,cin,C++,Vector,Append,Std,Cin,例如,a是1 4 9 16和b是9 7 4 9 11然后返回1 4 9 16 9 4 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]); }

例如,
a是1 4 9 16
b是9 7 4 9 11
然后返回
1 4 9 16 9 4 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;
}
矢量附加(矢量a、矢量b)
{
附加向量;
for(无符号整数i=0;i
我的一次尝试:

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;
}
intmain()
{
cout>输入)
{
if(cin.fail())
{
cout>输入2)
{
如果(cin.fail()){break;}
否则{b.向后推(输入2);}
}
}
else{a.push_back(输入);}
}
返回0;
}

当我运行
main()
函数时,如何使用
cin
获取向量
a
b

这不是答案,但我想指出一件有趣的事情:

while (cin >> input)
{
    if (cin.fail())
    //...
}
while
中,我看不到
if
的任何点。如果
cin>>输入失败
,循环将在执行
If
之前收支平衡

这意味着,代码中的
while
块减少为:

while (cin >> input)
{
    a.push_back(input);
}

这相当于您的
while

这不是答案,但我想指出一件有趣的事情:

while (cin >> input)
{
    if (cin.fail())
    //...
}
while
中,我看不到
if
的任何点。如果
cin>>输入失败
,循环将在执行
If
之前收支平衡

这意味着,代码中的
while
块减少为:

while (cin >> input)
{
    a.push_back(input);
}

这相当于您的
while

如果您希望在失败后再次使用它,则需要清除
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());
}
void追加(std::vector&a,const std::vector&b)
{
a、 保留(a.尺寸()+b.尺寸());
a、 插入(a.结束(),b.开始(),b.结束());
}

如果您希望在出现故障后再次使用它,则需要清除
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());
}
void追加(std::vector&a,const std::vector&b)
{
a、 保留(a.尺寸()+b.尺寸());
a、 插入(a.结束(),b.开始(),b.结束());
}

您会问两个问题:如何附加两个向量,以及如何输入两组数字

至于第一个,我将使用其他人所描述的
std::vector::insert
。至于第二个,我有两个选择

您可以使用sentinel值(-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, ", "));
} 
#包括
使用std::cin;
使用std::cout;
#包括
使用std::ostream_迭代器;
#包括
使用std::vector;
int main()
{
int i;
向量v1;
while(cin>>i){
如果(i==-1)
打破
v1.推回(i);
}
矢量v2;
while(cin>>i)
v2.推回(i);
插入(v1.end(),v2.begin(),v2.end());
复制(v1.begin(),v1.end(),ostream_迭代器(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";
}
#包括
使用std::cin;
使用std::cout;
使用std::getline;
使用std::ostream;
使用std::istream;
#包括
使用std::stringstream;
#包括
使用std::ostream_迭代器;
#包括
使用std::vector;
#包括
使用std::string;
矢量
获取(ostream&os、istream&is)
{       
矢量结果;
os>i)
结果:推回(i);
返回结果;
}
int main()
{
向量v1(fetch(cout,cin));
向量v2(fetch(cout,cin));
插入(v1.end(),v2.begin(),v2.end());
复制(v1.begin(),v1.end(),ostream_迭代器(cout,“,”);

你可以问两个问题:如何附加两个向量,以及如何输入两组数字

对于第一种,我会像其他人所描述的那样使用
std::vector::insert

您可以使用sentinel值(-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, ", "));
} 
#包括
使用std::cin;
使用std::cout;
#包括
使用std::ostream_迭代器;
#包括
使用std::vector;
int main()
{
int i;
向量v1;
while(cin>>i){
如果(i==-1)
打破
v1.推回(i);
}
矢量v2;
while(cin>>i)
v2.推回(i);
插入(v1.end(),v2.begin(),v2.end());
复制(v1.begin(),v1.end(),ostream_迭代器(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";
}
#包括
使用std::cin;
使用std::cout;
使用std::getline;
使用std::ostream;
使用std::istream;
#包括
使用std::stringstream;
#包括
使用std::ostream_迭代器;
#包括
使用std::vector;
#包括
使用std::string;
矢量
获取(ostream&os、istream&is)
{       
矢量结果;
os>i)
结果:推回(i);
返回结果;
}
int main()
{
向量v1(fetch(cout,cin));
向量v2(fetch(cout,cin));
插入(v1.end(),v2.begin(),v2.end());
复制(v1.begin(),v1.end(),ostream_迭代器(cout,“,”);

我不能理解嵌套循环。和
while(cin>>输入吗