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