Объявление динамического 2D вектора в классе - PullRequest
4 голосов
/ 12 марта 2011

Мы пытаемся использовать 2D-вектор, потому что нам нужен 2D-массив, который будет динамически расти.

Мы попробовали это: В объявлении класса:

    vector<vector<double> > table;

Но тогда таблица, кажется, не распределена. Мы получаем ошибку, когда пытаемся получить доступ к членам.

Итак, мы попробовали это:

Объявление класса:

    vector<vector<double> >* table;

Конструктор:

     table = new vector<vector<double> >;

Но теперь мы так, как мы обращались к нему раньше (с [] []), не работают.

Мы попробовали фиктивный класс с этим:

class myClass {
    public:
    myClass();
    ~myClass();
    vector<vector<double> > t;
 };

myClass::myClass() 
{
    t = vector<vector<double> > (10, vector<double>(10));
}

Но он не освободился должным образом, и мы получили дампы ядра. Кроме того, когда мы пытались увеличить массив, нам приходилось явно строить каждую новую строку.

Ex:

t[50] = vector<double>(5);
t[50][10] = 10;

Если бы мы не делали так, мы бы получили ошибку

Ответы [ 3 ]

5 голосов
/ 12 марта 2011

Вам необходимо изменить размер таблиц, прежде чем вы получите доступ к элементам.

vector<vector<double> > table;
table.resize(10);
for (int i = 0; i < 10; ++i)
  table[i].resize(20);
3 голосов
/ 12 марта 2011

Убедитесь, что ваши векторы достаточно велики для хранения ваших элементов. Если вектор t имеет размер N, последний доступный элемент: t[N-1].

t = vector<vector<double> > (10, vector<double>(10));
t[50] = vector<double>(5); // This is wrong! Vector size is 10, you access 50th.
t[50][10] = 10; // Wrong again! Vector size 5, you access 10th.
2 голосов
/ 12 марта 2011

Если у вас установлен Boost, попробуйте использовать Boost Multi-array .

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