Учитывая вектор вектора типа int (например), следующий фрагмент кода позволяет мне сопоставить плоскую позицию с 2-мерным индексом и получить доступ к элементу:
int x = 0, y = 0, acc = 0;
while ((acc = myVector[x].size()+acc) <= position) {
x++;
y= acc;
}
y = position - y;
Мне было интересно, есть ли там - это способ перебора всех элементов моего 2-мерного вектора с использованием одного указателя, увеличивая его на номер позиции.
EDIT1:
std::vector<std::vector<int>> myVector;
myVector.emplace_back();
for (int i = 0; i < 10; i++) {
myVector[0].emplace_back(0);
}
myVector.emplace_back();
for (int i = 0; i < 5; i++) {
myVector[0].emplace_back(1);
}
myVector.emplace_back();
for (int i = 0; i < 8; i++) {
myVector[0].emplace_back(2);
}
for (auto row : myVector) {
for (auto col : row) {
std::cout << col << std::endl;
}
}
Мне нужно создать указатель к первому элементу, на который указывает myVector[0][0]
, а затем создайте связь между концом первой строки и началом следующей, чтобы я мог перебирать ее с помощью одного указателя. Если мне нужен элемент в позиции 12, то, просто увеличивая указатель, я могу получить элемент в позиции (1,1). В основном я пытаюсь имитировать поведение массивов c, используя std :: vectors