2013-08-17 85 views
0

這可能會相當簡單,但解決方案目前正在逃避我。這是一個簡短的程序運行。訪問迭代器的衆多元素

該程序顯示並允許用戶洗牌,然後以洗牌形式再次在用戶輸入中顯示它們。目前,我的輸出只有一行,直到它強制自己創建一個超過窗口大小的新行。

我需要做的是建立4條獨立的13張牌線,我在僞過這樣的方式是什麼:

if(deck[12]) 
    cout << endl; 

但我無法得到它來訪問迭代器的元素,因此它可以在13張牌被顯示後結束線路。這是我的循環顯示卡:

for (vector<const string*>::const_iterator it=deck.begin(); it!= deck.end(); ++it) 
      { 
       cout << (*it)->c_str() << ' '; 
      } 
+0

那麼,你想每13張卡片都有一個換行符?也許使用計數器? –

+1

「訪問迭代器的衆多元素」是這個問題的一個非常超現實的標題。 – juanchopanza

回答

2

如何獨立的計數器?

int n = 0; 
for (vector<const string*>::const_iterator it=deck.begin(); it!= deck.end(); ++it) 
{ 
    cout << (*it)->c_str() << ' '; 
    if (++n == 13) 
    { 
     n = 0; 
     cout << '\n'; 
    } 
} 
+0

這個打在頭上的指甲,非常感謝你。 –

2

你可以做這樣的事情 -

if ((it - deck.begin()) % 13 == 0) 
{ 
    std::cout << "\n"; 
} 
+0

儘管這種方法的確行得通,但我並沒有想到,第一張卡在技術上會是0,因此在第一張卡上結束行。但是,這確實實現了我想要弄清楚的內容,所以謝謝你告訴我該怎麼做。 –

+0

這只是使用計數器的一種替代方法。 jrok的解決方案也很乾淨。 – Mahesh

0

你有52張牌,並希望顯示他們在4行,每行13張牌。這很簡單:

對(INT線= 0;我< 4; ++ⅰ){ 對(INT卡= 0;卡< 13; ++卡) 的std :: COUT < < *它++); std :: cout < <'\ n'; }

其中it被初始化爲指向卡組中的第一張卡片。請注意,該代碼假定存儲在卡組中的對象可以直接插入到一個ostream中。將const string*更改爲string;你會發現你的生活更簡單。