отладка массивов списков - PullRequest
1 голос
/ 18 февраля 2012

Для такого кода:

std::list<int> a[3][3];

int myNumber = 0;

for(int i = 0; i < 3; i++)
{
    for(int j = 0; j < 3; j++)
    {
        a[i][j].push_back(myNumber);
        myNumber++;
    }
}

Локальное окно отладчика показывает:

enter image description here

Нет простого способа пройти и увидеть, что:

список [0] [0] содержит 0

список [0] [1] содержит 1

список [0] [2] содержит 2

список [1] ​​[0] содержит 3 и т.д.

Я могу видеть только то, что списки [0] [0], [1] [0] и [2] [0] содержат, но я хочу посмотреть, что содержат все списки. Как мне сделать это в Visual Studio 2010?

1 Ответ

1 голос
/ 18 февраля 2012

"Нет простого способа просмотреть этот список. a[0][2] содержит 2"

Вы щелкаете правой кнопкой мыши где-то в коде, выбираете Quick Watch , напишите туда a[0][2] и с помощью Добавьте часы , которые вы положили в "Часы 1" , чтобы вы могли видеть list<int> на a[0][2] правильно.

Когда вы объявляете простой list<int> l;, Visual Studio показывает это правильно.Вы можете видеть все элементы.

Но когда вы объявляете массив списков следующим образом:

std::list<int> l[2];
l[1].push_back(3);
l[1].push_back(4);

, тогда переменная l считается указателем на первый std::list<int>, так что даже если выпомещая элементы в список по индексу 1, Visual Studio просто показывает, что l - пустой список: some address [0]().Я могу видеть l[1], только если он находится в Watch: enter image description here

Возможное решение - заменить простой массив в стиле c ([]) на std::vector:

std::vector<std::list<int> > l;
l.resize(2);

l[1].push_back(3);
l[1].push_back(4);

поэтому l больше не считается указателем на первый list.Поскольку l равно vector Visual Studio правильно отображает все элементы:
enter image description here

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