我试图编写一个函数,它接受两个向量并将它们合并在一起,来回交替(即v1 = 1,2,3 v2 = 4,5,6会产生v3 = 1,4, 2,5,3,6)。问题是,当我运行我的函数时,我得到一个错误,说“矢量迭代器”是不兼容的。'根据我的研究,我认为它与我使用.begin()和.end()函数有关,但看到我只在这里工作了几个月,我不知道如何要解决这个问题。注意:NULL上的push_back是在向量中留下一个空的空格。
以下是代码:
void merge(vector<double> x, vector<double> y, vector<double>& merged) {
auto xStart = x.begin();
auto yStart = y.begin();
while (xStart != x.end() && yStart != x.end()) {
merged.push_back(*xStart);
merged.push_back(*yStart);
++xStart;
++yStart;
}
if (xStart != x.end()) {
while (xStart!= x.end()) {
merged.push_back(*xStart);
merged.push_back(NULL);
++xStart;
}
}
if (yStart != y.end()) {
while (yStart != y.end()) {
merged.push_back(*yStart);
merged.push_back(NULL);
++yStart;
}
}
}
答案 0 :(得分:1)
有一个错字
while (xStart != x.end() && yStart != x.end()) {
^^^^^^
必须有
while (xStart != x.end() && yStart != y.end()) {
^^^^^^^
这句话
merged.push_back(NULL);
没有意义。
同样声明像
这样的函数要好得多void merge( const vector<double> &x, const vector<double> &y, vector<double>& merged );
这是一个示范程序
#include <iostream>
#include <vector>
template <typename T>
void merge( const std::vector<T> &x,
const std::vector<T> &y,
std::vector<T> &merged )
{
merged.reserve( merged.size() + x.size() + y.size() );
auto xStart = x.begin();
auto yStart = y.begin();
for ( ; xStart != x.end() && yStart != y.end(); ++xStart, ++yStart )
{
merged.push_back(*xStart);
merged.push_back(*yStart);
}
for ( ; xStart != x.end(); ++xStart )
{
merged.push_back( *xStart );
}
for ( ; yStart != y.end(); ++yStart )
{
merged.push_back( *yStart );
}
}
int main()
{
std::vector<int> v1 = { 0, 2, 4, 6, 8 };
std::vector<int> v2 = { 1, 3, 5, 7, 9 };
std::vector<int> merged;
merge( v1, v2, merged );
for ( int x : merged ) std::cout << x << ' ';
std::cout << std::endl;
return 0;
}
它的输出是
0 1 2 3 4 5 6 7 8 9