簡體   English   中英

C ++編寫一個函數,用於交織向量中2個向量的內容

[英]C++ write a function that interlaces the content from 2 vectors in a vector

我想寫一個函數,它接受兩個向量作為參數(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;
}

你幾乎是正確的。 每次在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循環之外發生的。

此外,正如約翰所說, kt是重復的工作。 代碼可以簡化為

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM