вывод строки вектора - PullRequest
       4

вывод строки вектора

0 голосов
/ 31 декабря 2018

это было опущено.Не следует правилам.

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Я думаю, что вы хотели сделать следующее:

void get_row(int r, const std::vector<int>& in, std::vector<int>& out) {

    int rowlength = std::sqrt(in.size());
    std::vector<std::vector<int>> temp; // now a 2D vector (vector of vectors)

    for(int i = 0; i < rowlength; i++) {
        temp.emplace_back();    // for each row, we need to emplace it
        for(int j = 0; j < rowlength; j++) {
            // we need to copy every value to the i-th row
            temp[i].push_back(in[twod_to_oned(i, j, rowlength)]);
        }
    }

    for(int j = 0; j < rowlength; j++) {
        // we copy the r-th row to out
        out.push_back(temp[r][j]);
    }
}

Ваше решение использовало std::vector<int> вместо std::vector<std::vector<int>>.Первый не поддерживает доступ к элементам с помощью синтаксиса [][].

Вы также присваивали этому вектору его границы.Это приводит к неопределенному поведению .Всегда используйте push_back или emplate_back для добавления элементов.Используйте operator [] только для доступа к текущим данным.

Наконец, то же самое относится и к вставке строки в вектор out.Только вы можете знать, содержит ли вектор out достаточно элементов.Мое решение предполагает, что out пусто, поэтому нам нужно push_back всю строку к нему.

Кроме того: вы можете захотеть использовать std::vector::insert вместо ручного for() цикла.Попробуйте заменить третий цикл на:

out.insert(out.end(), temp[r].begin(), temp[r].end());

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

0 голосов
/ 31 декабря 2018

принимает на вход одномерный вектор

, но

int rowlength = std::sqrt(in.size());

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

Эта путаница с вводом может решить вашу проблему и должна быть решена, прежде чем делать что-либо еще.

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