Многомерный вектор

https://codepen.io/Tanded/pen/OqVBPE

function fnc(el){ el.classList.toggle("clicked"); }

добавить небольшую функцию js для переключения класса и редактирования css в анимационных строках, когда они щелкнули по классу вместо hover &: hover -> & amp;. щелкнул по строке 53

30
задан Reinderien 27 May 2018 в 09:13
поделиться

6 ответов

Если у вас нет для использования векторов, вы можете попробовать Boost.Multi_array . Вот ссылка на короткий пример.

6
ответ дан 27 November 2019 в 23:16
поделиться

Как указал Ари, vector > - правильный способ сделать это.

В дополнение к этому, в таких случаях я всегда рассматриваю обертывание внутреннего вектора (фактически, независимо от того, это представляет) в классе, потому что сложные структуры STL имеют тенденцию становиться неуклюжими и запутывающими.

0
ответ дан 27 November 2019 в 23:16
поделиться

vector > a;

Если вы хотите определить строки и столбцы,

vector > a {{11, 2, 4}, {4, 5, 6}, {10, 8, -12}};

32
ответ дан 27 November 2019 в 23:16
поделиться
std::vector< std::vector< int > > a; // as Ari pointed

Использование этого для растущей матрицы может оказаться сложным, поскольку система не гарантирует, что все внутренние векторы имеют одинаковый размер. Всякий раз, когда вы растете во втором измерении, вам придется явно увеличивать все векторы.

// grow twice in the first dimension
a.push_back( vector<int>() );
a.push_back( vector<int>() );

a[0].push_back( 5 ); // a[0].size() == 1, a[1].size()==0

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

Если вы планируете использовать матрицу фиксированного размера, вам следует рассмотреть возможность инкапсуляции в класс и переопределения оператора () вместо предоставления двойного синтаксис массива. Прочтите часто задаваемые вопросы по C ++ по этому здесь

30
ответ дан 27 November 2019 в 23:16
поделиться
std::vector< std::vector<int> > a;

    //m * n is the size of the matrix

    int m = 2, n = 4;
    //Grow rows by m
    a.resize(m);
    for(int i = 0 ; i < m ; ++i)
    {
        //Grow Columns by n
        a[i].resize(n);
    }
    //Now you have matrix m*n with default values

    //you can use the Matrix, now
    a[1][0]=98;
    a[1][1]=989;
    a[1][2]=981;
    a[1][3]=987;

//OR
for(i = 0 ; i < m ; ++i)
{
    for(int j = 0 ; j < n ; ++j)
    {      //modify matrix
        int x = a[i][j];
    }

}
13
ответ дан 27 November 2019 в 23:16
поделиться

Предложение dribeas - это действительно правильный путь.

Чтобы указать причину, по которой вы можете захотеть пойти по маршруту operator (), учтите, что, например, если ваши данные являются разреженными, вы может расположить его по-другому, чтобы сэкономить внутреннее пространство, а operator () скрывает эту внутреннюю проблему реализации от конечного пользователя, обеспечивая лучшую инкапсуляцию и позволяя освободить место или ускорить внесение изменений во внутреннюю компоновку позже, не нарушая ваш интерфейс.

0
ответ дан 27 November 2019 в 23:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: