используя std :: fill для двумерного вектора int - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь установить значения всех элементов в двухмерном векторе для определенного значения. Насколько я знаю, нельзя использовать memset для векторов, например, как они используются для массивов. Следовательно, я должен использовать std :: fill, чтобы установить все элементы в двухмерном векторе на определенное значение. Однако я знаю, как использовать заливку для одномерного вектора, как показано ниже.

vector<int> linearVector (1000,0);
fill(linearVector.begin(),linearVector.end(),10);

Однако, когда я пытаюсь сделать что-то похожее для 2D-вектора (как показано ниже), это не работает.

vector<vector<int> > twoDVector (100,vector <int> (100,0));
fill(twoDVector.begin(),twoDVector.end(),10);

PS: я знаю, что могу легко спроектировать вложенный цикл for для ручной установки элементов 2D-вектора на желаемое значение. Однако в моей программе это невозможно, поскольку размер двумерного вектора достаточно велик, и параллельно выполняются другие трудоемкие функции (рекурсивные функции).

Ответы [ 3 ]

0 голосов
/ 04 июля 2018

В C ++ 17 вы можете сделать это, как показано ниже:

#include <algorithm>
#include <execution>
#include <vector>

//...    

std::for_each(std::execution::par_unseq, nums.begin(), nums.end(),
    [](std::vector<int>& vec) {
    std::for_each(std::execution::par_unseq, vec.begin(), vec.end(),
    [](int& n) {n = 10;});}
);

Кажется, что это параллельно, но не так ясно, как простая функция заполнения;)

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

0 голосов
/ 04 июля 2018

Это должно помочь вам

std::vector<std::vector<int> > fog(
A_NUMBER,
std::vector<int>(OTHER_NUMBER)); // Defaults to zero initial value

Ссылка: Инициализация двумерного std :: vector

0 голосов
/ 04 июля 2018

Вы можете использовать так:

fill(twoDVector.begin(), twoDVector.end(), vector<int>(100, 10));
...