2015-10-19 46 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向量上。 –