【问题标题】:Merging two vectors into a third by even indices from the first vector and odd indices from the second通过第一个向量的偶数索引和第二个向量的奇数索引将两个向量合并为第三个向量
【发布时间】:2015-06-30 09:09:23
【问题描述】:

我试图通过复制/合并第一个向量的偶数索引处的元素,以及复制/合并第二个向量的奇数索引处的元素,将两个向量合并为第三个向量。

注意:两个向量都是二维的。

我有以下逻辑,但它似乎不起作用:

void pattern::mergePatters( void ) {
  cout<<"\n This is Merge Patters"<<endl;

  patter_input.reserve( patter_one.size() + patter_two.size() );

  for( int i=0;i<patter_one.size(); i++ ){
    for( int j =0; j<patter_one[i].size(); j++){
      if(j%2==0){
        patter_input.push_back( patter_one[j]);
      }
    }
      //cout<< " patter_one answers["<<i<<"]= " << answers_p1[i]<<endl;
  }

  for( int i=0;i<patter_two.size(); i++ ){
    for( int j =0; j<patter_two[i].size(); j++){
      if(j%2!=0){
        patter_input.push_back( patter_two[j]);
      }
    }
      //cout<< " patter_one answers["<<i<<"]= " << answers_p1[i]<<endl;
  }

}

void pattern::printMergePatters ( void ){
  cout<<"\n This is printMergePatters "<<endl;
  for ( int i=0;i<patter_input.size();i++){
    for( int j =0; j<patter_input[i].size(); j++){
      cout << " Merge Patter["<<i<<"]["<<j<<"]= " << patter_input[i][j]<<endl;
    }
  }
}

【问题讨论】:

  • 有什么不好的?
  • 不清楚你想如何合并。示例输入/输出可能会有所帮助。
  • 您可能会将整个patter_one[j] 多次添加到patter_input 中。看到patter_one[j] 本身似乎是一个向量,这可能不是你想要做的。

标签: c++ vector merge


【解决方案1】:

我建议您在一个循环中执行实际复制,而不是使用两个。使用 patter_onepatter_two 数组的迭代器可能更容易,但我将使用索引。

const unsigned int total_size = patter_one.size() + patter_two.size();
patter_input.reserve(total_size);
unsigned int p1_index = 0U;
unsigned int p2_index = 0U;
for (unsigned int i = 0U; i < total_size; i += 2U)
{
  patter_input.push_back(patter_one[p1_index]);
  patter_input.push_back(patter_two[p2_index]);
  ++p1_index;
  ++p2_index;
}

注意循环的增量为 2,因为每次迭代都会推送两个数组元素。

编辑 1:复制奇偶元素
要复制 patter_one 中的偶数元素和 patter_two 中的奇数元素,请更改索引初始化值和索引增量:

unsigned int p1_index = 0U;
unsigned int p2_index = 1U;
for (unsigned int i = 0U; i < total_size; i += 2U)
{
  patter_input.push_back(patter_one[p1_index]);
  patter_input.push_back(patter_two[p2_index]);
  p1_index += 2;
  p2_index += 2;
}

需求需要澄清,所以我提出了两个替代方案。根据patter_onepatter_two 向量的大小,保留的数量可能不正确。上面的片段只复制了一半的patter_onepatter_two 向量,所以你原来的reserve 数量可能不正确。

复制一半patter*向量的预留量为:

const unsigned int total_size = patter_one.size() / 2 // Only even items
                              + patter_two.size() / 2; // Only odd from here.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多