2013-11-09 3 views

ответ

2

Вы можете использовать конструктор два итератора для создания экземпляра вектора с копией данных в wins:

unsigned* start = &wins[0][0]; 
std::vector<unsigned> vwins(start, start + (8 * 3)); 

Это зависит от арифметики указателей, тот факт, что указатели являются итераторами, а также тот факт, что 2D массивы являются смежными блоками, по существу, 1D массивами с умной индексацией.

+0

Вы имеете в виду 'unsigned _wins [8] [3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}, {0, 3, 6} , {1, 4, 7}, {2, 5, 8}, {0, 4, 8}, {2, 4, 6}}; std :: vector побед (_wins, _wins + (8 * 3)); '? –

+0

'wins' распадается на' unsigned (*) [3] '. – jrok

+0

Я получаю 'ошибка C2955: 'std :: vector': использование шаблона шаблона требует списка аргументов шаблона' at 'std :: vector vwins (выигрывает, выигрывает + (8 * 3));' –

0

Поскольку я не знаю, хотите ли вы 2D-вектор или нет, я обработаю 2D-футляр, так как juanchopanza обрабатывает 1-й случай. :) Если вы используете C++ 11, то вы можете просто сделать следующее:

#include <iostream> 
#include <vector> 
using namespace std; 

int main() 
{ 
    vector<vector<int>> wins = { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 0, 3, 6 }, { 1, 4, 7 }, { 2, 5, 8 }, { 0, 4, 8 }, { 2, 4, 6 } }; 
    for(vector<int> & row : wins) { 
     for(int &col : row) { 
      cout << col << " "; 
     } 
     cout << endl; 
    } 
    return 0; 
} 

В этом примере используется C++ 11 списков инициализатора создать аналогичную структуру, называемые также выигрывает. Я также написал небольшой код, чтобы показать, как вы могли бы пропустить его, чтобы распечатать его в чувственном порядке.

Надеюсь, это поможет! :)

+1

Спасибо. Я переключился на векторы в моей игре с tic tac toe, но не работал должным образом. Я имею в виду, он спрашивает меня, хочу ли я играть 1 или 2, а затем он говорит, что компьютер перемещается и зависает. Вот код: http://pastebin.com/R94RRbz4 ​​Есть ли что-то, что я делаю неправильно? –

+0

Ha! Я знал, что это цифры в массиве! :) Я просто написал игру tic tac toe сам несколько дней назад ... позвольте мне взглянуть ... –

+0

Какая бы проблема у вас ни была, вероятно, в вашем минимаксном коде ... Я бы рекомендовал установить максимальную глубину поиска и если это поможет. –