C++入门使用向量

问题描述:

井字棋树中的所有posiible孩子都在那里定大小的井字棋“板” N返回所有给定板的孩子写的实现。但是,它不会打印出每个矢量内的任何值,我不知道为什么。C++入门使用向量

这里我们假设X(表示为1)总是在O之前(表示为-1)。空的空间是指为0

这里是实现文件,其中头文件有vector<int> b_;int n_;作为其私有数据成员:

#include "tttboard.h" 
#include <vector> 
#include <iostream> 

using namespace std; 

tttboard::tttboard() 
{ 
} 

tttboard::tttboard(int n, vector<int> &e) 
{ 
    n_ = n; 
    for (int i=0; i<n*n; i++) 
    { 
     e.push_back(i); 
    } 
} 

tttboard::tttboard(int n){ 
    n_ = n; 
    for (int i=0; i<n*n; i++) 
     b_.push_back(0); 
} 

vector<tttboard> tttboard::possibleNextBoards(int turn) const{ 
    vector<tttboard> children; 
    int temp; 
    for (int i = 0; i < children.size(); i++) 
    { 
     children.push_back(temp); 
    } 
    return children; 
} 

bool tttboard::operator==(const tttboard& rhs) const 
{ 
    bool check = true; 
    for (int i=0; i < b_.size(); i++) 
    { 
     if (b_[i] == rhs.b_[i]) 
     { 
      continue; 
     } 
     else 
     { 
      check = false; 
      break; 
     } 
    } 
    return check; 
} 

ostream& operator << (ostream & output, const tttboard &board) 
{ 
    output << "{"; 
    for (int i=0; i < board.b_.size(); i++) 
    { 
     output << board.b_[i]; 
     if (i != board.b_.size() - 1) 
      output << ", "; 
    } 
    output << "}"; 
    return output; 
} 

编辑:这是主要的文件,我我有工作(道歉,如果这是一个有点长)

#include "tttboard.h" 
#include "gTree.h" 

#include <vector> 
#include <iostream> 
#include <algorithm> 

using namespace std; 

void Tokenize(string line, vector<string> & tokens, string delimiters = "\t "){ 
string token = ""; 
    string OneCharString = " "; 
    for (int i=0; i<line.size(); i++) 
      if (find(delimiters.begin(), delimiters.end(), line[i])!=delimiters.end()) // line[i] is one of the delimiter characters 
      { 
        if (token != "") 
          tokens.push_back(token); 
        token = ""; 
      } 
      else 
      { 
        OneCharString[0] = line[i]; 
        token +=OneCharString; 
      } 

    if (token != "") 
      tokens.push_back(token); 
} 

int getTurn(vector<int> b){ 
    int s = 0; 
    for (int i=0; i<b.size(); i++) 
     s+=b[i]; 
    if (s==0) 
     return 1; 
    else 
     return -1; 
} 

int main(int argc, char** argv){ 
    if (argc!=3){ 
     cout << "usage: executable.o n board\n example of board:(\"{0,0,1,0,0,-1,1,0,0}\")"; 
     return 1; 
    } 

int n= atoi(argv[1]); 
string str_board = argv[2]; 
vector<string> tokens; 
Tokenize(str_board,tokens," {,}"); 
vector<int> board; 
for (int i=0; i<tokens.size(); i++){ 
    board.push_back(atoi(tokens[i].c_str())); 
} 
if (n*n!= board.size()){ 
    cout<< "n and board are not consistent!\n"; 
    return 1; 
} 

    tttboard p(n,board); 
int turn = getTurn(board); 
vector<tttboard> v = p.possibleNextBoards(turn);  

cout <<"children of the given board:" << endl; 
for (int i=0; i<v.size(); i++) 
    cout << v[i] << endl; 

return 0; 

}

+0

'main'看起来像什么?另外,'tttboard :: operator =='并不需要那么复杂:只是'for(...){if(b_ [i]!= rhs.b_ [i])返回false; } return true;'会做,并且'possibleNextBoards'中的逻辑对我来说没有多大意义。虽然这些都与你的问题没有关系。 – HTNW

+0

@HTNW以上 – nickoba

ST d :: cout被缓冲。如果添加一个std :: endl,输出是否打印?尝试在cout行之后添加std :: flush,例如cout < < .. < < std :: flush;

+0

主文件编辑仍然打印出空的东西 – nickoba

+0

是否得到印刷这一行? COUT

+0

确实打印出来,我编辑了我的代码以反映一些变化 – nickoba