Доступ к элементам вектора <vector <char>> в виде строк и столбцов - PullRequest
2 голосов
/ 22 февраля 2011

Я пытаюсь использовать

vector<vector<char> > matrix;

в качестве фактической матрицы.

Матрица инициализируется со всеми '\ 0' и заполняется во время процесса.

давайте представим, что в определенный момент времени я нахожусь в такой ситуации:

     0   1  2  3
  0  a   b  c \0
  1  b   b \0 \0
  2  c  \0 \0 \0
  3  \0 \0 \0 \0

, если я хочу иметь символ * в первой строке, я могу сделать:

&word_square[0][0]

, который даст мне указатель на первую строку, указатель, который я могу использовать в качестве массива C char (например, "abc")

Что если я хочу получить первый столбец таким же образом?Это возможно, или мне придется сделать это с for?

int i =0;
string column;
while(matrix[i][0] != '\0' )
{
  column.push_back(matrix[i][0]);
  i++;
}

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

Большое спасибо тем, кто поможет.

Ответы [ 3 ]

4 голосов
/ 22 февраля 2011

Используя vector< vector<char> >, вы не можете гарантировать, что внутренние векторы будут хранить свои данные непрерывно в памяти, а это означает, что не существует способа получить char*, который указывает на элементы в порядке столбцов, если вы не скопируете данные вручную .

2 голосов
/ 22 февраля 2011

Вы можете нарезать std :: valarray , чтобы сделать то, что вам интересно. Они используют непрерывную память, а срез управляет доступом к исходному объекту данных, поэтому копирование не требуется.

1 голос
/ 22 февраля 2011

Невозможно с вектором векторов. Лучше всего написать собственный класс, который возвращает прокси-объекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...