我正在編寫一個允許輸入類似俄羅斯方塊形狀的程序。我存儲在布爾的2-d矢量這些形狀所以他們會再看看這樣的:訪問多維矢量指針向量中的元素
110 | 1 | 111
011 | 1 | 010
| 1 | 111
// Where a 0 denotes "empty space"
我再點到每臺2-d載體和這些指針存儲在一個名爲矢量形狀。 我的問題在於訪問那些個人的0和1(爲了將它們與其他形狀進行比較)。
例如,給定:
vector<vector<bool> > Shape;
vector<Shape *> shapes;
其中形狀具有指向2-d向量I先前給出了三個元件,我希望能夠訪問1中的(0,1)位置第一個形狀。
我已經試過:
shapes[index]->at(0).at(1);
shapes[index]->at(0)[1];
shapes[index][0][1];
在許多其他事情,但沒有這些似乎是給我我想要的東西。我還是比較新的指針,所以我希望我不會錯過明顯的東西。
預先感謝您!
根據要求,這裏是我的代碼更大塊。
#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#include <sstream>
using namespace std;
typedef vector<vector<bool> > Shape;
class ShapeShifter {
public:
ShapeShifter(int argc, char **argv);
void Apply(int index, int row, int col);
bool FindSolution(int index);
void AddShape(Shape *newShape);
void AddMove(int index, int row, int col);
void PrintMoves();
void PrintGrid();
protected:
vector<vector<bool> > grid;
vector<Shape *> shapes;
vector<string> moves;
};
void ShapeShifter::Apply(int index, int row, int col) {
int i, j, k;
int y = 0, z = 0;
if((row + shapes[index]->size() > grid.size()) || (col + shapes[index]->at(0).size() > grid[0].size())) {
return; // shape won't fit
}
for(i = row; i < (row + shapes[index]->size()); i++) {
for(j = col; j < (col + shapes[index]->at(0).size()); j++) {
if(shapes[index]->at(y)[z] == 1) {
if(grid[i][j] == 0) {
grid[i][j] = 1;
}
else {
grid[i][j] = 0;
}
}
z++;
}
z = 0;
y++;
}
return;
}
在此我的bool的網格和我想要與形狀,以掩蓋它在給定的索引,其中如果所述形狀具有1中的網格的對應元素的布爾將被翻轉。
形狀矢量填充與標準輸入線,像這樣:
ShapeShifter sshift(argc, argv);
Shape *newShape;
vector<bool> shapeLine;
int i, j;
string line;
while(getline(cin, line)) {
j = 0;
newShape = new Shape;
for(i = 0; i < line.size(); i++) {
if(line[i] == ' ') {
j++;
}
else {
shapeLine.push_back(line[i] - '0');
}
}
newShape->push_back(shapeLine);
sshift.AddShape(newShape);
line.clear();
}
void ShapeShifter::AddShape(Shape *newShape) {
shapes.push_back(newShape);
}
是什麼'給我什麼,我want'的意思嗎?你在期待什麼?你得到了什麼? –
發佈代碼段沒有幫助。請發佈[mcve]。 –
當您評估最後發佈的三個表達式時,您會得到什麼值。 –