Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过第一个向量的偶数索引和第二个向量的奇数索引将两个向量合并为第三个向量_C++_Vector_Merge - Fatal编程技术网

C++ 通过第一个向量的偶数索引和第二个向量的奇数索引将两个向量合并为第三个向量

C++ 通过第一个向量的偶数索引和第二个向量的奇数索引将两个向量合并为第三个向量,c++,vector,merge,C++,Vector,Merge,我试图将两个向量合并成第三个向量,方法是从第一个向量复制/合并偶数索引处的元素,从第二个向量复制/合并奇数索引处的元素 注:两个矢量都是二维的 我有以下逻辑,但似乎不起作用: void pattern::mergePatters( void ) { cout<<"\n This is Merge Patters"<<endl; patter_input.reserve( patter_one.size() + patter_two.size() ); fo

我试图将两个向量合并成第三个向量,方法是从第一个向量复制/合并偶数索引处的元素,从第二个向量复制/合并奇数索引处的元素

注:两个矢量都是二维的

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

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;
    }
  }
}

void模式::合并模式(void){

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

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;
}
这些要求需要澄清,因此我提出了两个备选方案。根据
模式一
模式二
向量的大小,保留的数量可能不正确。上面的片段只复制了
模式一
模式二
向量的一半,因此您原来的
保留
反义词可能不正确

复制一半的
模式*
向量的保留量为:

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

什么不起作用?不清楚您想如何合并。示例输入/输出可能会有所帮助。您可能多次将整个
patterone[j]
添加到
patterone[j]
中。鉴于
patterone[j]
本身似乎是一个向量,这可能不是您想要做的。
const unsigned int total_size = patter_one.size() / 2 // Only even items
                              + patter_two.size() / 2; // Only odd from here.