2015-10-19 83 views
-3

我想用一個迭代器打印一個向量:打印使用迭代器C++

#include <vector> 
#include <istream> 
#include <iostream> 
#include <sstream> 
#include <stdlib.h> 
#include <math.h> 
using namespace std; 

typedef vector<int> board; 
typedef vector<int> moves; 


int sizeb; 
board start; 
moves nmoves; 
istringstream stin; 


board readIn(std :: istream& in) { 
    int val; 
    while (in >> val) 
    start.push_back(val); 

    sizeb = start[0]; 
    return start; 
} 


void printboard(board n) { 
    int sizem = sizeb*sizeb; 
    int i = 1; 

    for (vector<int>::iterator it = start.begin() ; it != start.end(); ++it) { 
     for (int j = 0; j < sizeb; ++j) 
      cout << "\t" << it; 
     cout << endl; 
    } 
} 

我收到此錯誤:

error: invalid operands to binary expression 
    ('basic_ostream<char, std::__1::char_traits<char> >' and 
    'vector<int>::iterator' (aka '__wrap_iter<pointer>')) 
        cout << "\t" << it; 

你能幫助我嗎?

我想我正在轉換一個字符串,我收到一個int類型。也許我沒有用正確的方式迭代器(我認爲這是問題,但我不知道)

在此先感謝。

+1

您的代碼和錯誤消息看起來不匹配。檢查錯字。 – MikeCAT

+1

歡迎來到Stack Overflow!請** [編輯] **用[mcve]或[SSCCE(Short,Self Contained,Correct Example)]提問你的問題](http://sscce.org) – NathanOliver

+0

我想打印一個int向量,我正在使用一個int迭代器。 –

回答

6

如果你想在矢量打印int S,我想你想使用:

for (vector<int>::iterator it = start.begin() ; it != start.end(); ++it) 
    cout << "\t" << *it; 

通知我用*改變迭代it轉化成其當前迭​​代的價值。我不明白你試圖用j循環做什麼,所以我放棄了它。

+0

感謝您的幫助。例如,j循環將打印在3行3列的3 * 3向量上。 –

+0

你的代碼充滿了邏輯錯誤。你的矢量是1D,而不是2D。雖然它可以用來保存二維數組,但這需要一些我看不到的索引計算。你的嵌套循環寫入矢量的元素,但是每個元素被寫入'sizeb'次,而不是一次。這當然不是你想要的。返回'start'返回全局向量的一個副本,當然也不是你想要做的事情。使用向量的第一個元素作爲長度也可能不是您想要的,特別是如果您允許在該向量中輸入任意數量的整數。 –

0

在你更新的代碼,你有

cout << "\t" << it; 

你是不是dereferecing it並沒有不輸出功能vector<int>::iterator所以你得到一個編譯器錯誤。將您的代碼更改爲

cout << "\t" << *it; 

應該解決它。

作爲一個什麼是嵌套for循環?

+0

感謝您的幫助。例如,j循環將打印在3行3列的3 * 3向量上。 –