我正在尝试将两个向量合并为第三个向量,方法是复制/合并第一个偶数索引处的元素,然后复制/合并第二个奇数索引处的元素。
注意:两个向量都是二维的。
我有以下逻辑,但它似乎不起作用:
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;
}
}
}
答案 0 :(得分:0)
我建议您在一个循环中执行实际复制,而不是使用两个。使用patter_one
和patter_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_one
和patter_two
向量的大小。上述片段仅复制patter_one
和patter_two
向量的一半,因此原始reserve
数量可能不正确。
复制patter*
向量的一半的保留金额为:
const unsigned int total_size = patter_one.size() / 2 // Only even items
+ patter_two.size() / 2; // Only odd from here.