【问题标题】:C++ write a function that interlaces the content from 2 vectors in a vectorC ++编写一个函数,将向量中的2个向量的内容交错
【发布时间】:2013-11-16 11:53:05
【问题描述】:

我想写一个函数,它接受两个向量作为参数(int)并返回一个向量... 现在在函数中,我必须交错来自 2 个向量的值并将它们(交错)放入一个新向量中,例如:

vector<int> vec1 = {1,2,3, 4, 5,6,7};
vector<int> vec2 = {10,11,12};
=> Output vec 3 = 1,10,2,11,3,12,4,5,6,7

向量可以有不同的长度...我怎样才能做到这一点?我试过了:

vector<int>  entrelace(vector<int> a , vector<int> b) {
    vector<int> vec3(a.size()+b.size());        
    size_t i(0);
    size_t j(0);
    size_t k(0);
    size_t t(0);

    while ( t< vec3.size()) {

            if (i < a.size()) {
                vec3[k] = a[i];
                k++;
                i++;
            }
            if (j < b.size()) {
                vec3[k] = b[j];
                k++;
                j++;
            }       
        }
        t++;

    /**
    while ( i< (a.size() + b.size()) )
    {
        if (t < a.size()) {
            vec3.push_back(a[t]);
            t++;
            k++;
        }
        if (h < b.size()) {
            vec3.push_back(b[h]);
            h++;
            k++;
        }
    i++;    
    }
    * **/
    return vec3;
}

【问题讨论】:

  • 为什么t++ while 循环之外?

标签: c++ vector


【解决方案1】:

你几乎是正确的。每次在vec3 中设置元素时,您只需要增加t

while ( t< vec3.size()) {
    if (i < a.size()) {
        vec3[k] = a[i];
        k++;
        i++;
        t++;
    }
    if (j < b.size()) {
        vec3[k] = b[j];
        k++;
        j++;
        t++;
    }       
}

顺便说一句,更仔细地缩进代码会帮助您发现 t++ 发生在 while 循环之外。

另外,正如 john 所说,kt 正在重复工作。代码可以简化为

while (k < vec3.size()) {
    if (i < a.size()) {
        vec3[k++] = a[i++];
    }
    if (j < b.size()) {
        vec3[k++] = b[j++];
    }       
}

【讨论】:

  • 但是这样写你可以看到kt 是不必要的。其中一个可以删除。
  • @john 你刚刚打败了我。我想首先展示一个与原始代码偏差最小的解决方案。我现在添加了一个简化版本。
  • 好吧,对不起,但你首先让我得到了答案!
  • @john 无意批评。这是一个很好的评论,值得发布。
猜你喜欢
  • 2020-10-23
  • 1970-01-01
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-22
  • 2015-10-14
相关资源
最近更新 更多