2016-11-26 11 views
0

新しいリストを作成するために、単純なcharリストを同時に1つの要素に結合しようとしています。たとえば、listA = 1,2,3,4,5およびlistB = a、b、c、d、e、f、listC = a、1、b、2、c、3など...forループ本体のイテレータをインクリメントするにはどうすればいいですか?C++

I have a function taking in two char list, but I'm not able to increment the iterators from list A and B without receiving a compiler error. 

My code is as follows: 

void altFusion(std::list<char> listOne, std::list<char> listTwo) { 
    std::list<char>::iterator iter; 
    std::list<char>::iterator nextIter; 

    iter = listOne.begin(); 
    nextIter = listTwo.begin(); 
    std::list<char>newList; 


    char temp = *iter; 
    char temp2 = *nextIter; 



    for (int i = 0; i < 10; i++) { 
     newList.push_back(temp); 
     newList.push_back(temp2); 
     ++iter; 
     ++nextIter; 

    } 

    std::list<char>::iterator newListIter; 
    for (newListIter = newList.begin(); newListIter != newList.end(); ++newListIter) { 
     std::cout << *newListIter; 
    } 
} 

forループの本体の中でイテレータをインクリメントすることができない場合、どうすればよいですか?

++ iterと++ nextIterを削除するとプログラムは動作しますが、その答えは望ましくありません。 (a、1、a、1、a、1、a、1 ...)

ありがとうございました!

答えて

0
#include <iostream> 
#include <vector> 
#include <list> 
#include <iterator> 

using namespace std; 
std::list<char> listA = {'1','2','3','4','5'}; 
std::list<char> listB = {'a','b','c','d','e'}; 
     //listC = a,1,b,2,c,3 etc... 
int main() 
{ 

    std::list<char> new_list; 

    for (auto iterator = listA.begin(), end = listA.end(); iterator != end; ++iterator) 
    { 
     // get current index 
     int index = std::distance(listA.begin(), iterator); 
     // insert item from list a 
     new_list.push_back(*iterator); 

     // listb item 
     auto it = listB.begin(); 
     std::advance(it, index); 

     new_list.push_back(*it); 

    } 

    for (auto n : new_list) 
    { 
     std::cout << n << std::endl; 
    } 
    return 0; 
} 

これにより、ポストインクリメントとプリインクリメントが機能しない理由を説明します。あなたはちょうど同じ値を繰り返し使用しています。あなたはtempとtemp2を置き換えていません。

newList.push_back(temp); 
newList.push_back(temp2); 
+0

私はstd :: advance()を使用してリストをインクリメントしていますが、これを使用している理由があり、なぜプレとポスト(++)を使用しても機能しないのですか?それは範囲の問題ですか? 私はあなたの解決策をまだ試していません。 –

+0

std :: advanceはイテレータをn個の要素だけインクリメントします。否定的であればそれは減少する。 –

+0

あなたのコードはthis.newList.push_back(temp)のために現在動作しています。 newList.push_back(temp2); –

関連する問題