Переписать в массив элементы матрицы, больше x C++

Вот уже час ломаю голову как из матрицы A переписать элементы в массив B которые будут больше заданного x

Получилось сделать только кратное определенному числу:

#include <iostream>
#include <vector>
#include <random>
#include <iterator>
int main()
{
    setlocale(LC_ALL, "rus");
    std::default_random_engine gen{ std::random_device()() };
    std::uniform_int_distribution<> dist(-10, 10);
    int n, m; std::cout << "N, M = "; std::cin >> n >> m;
    std::vector<std::vector<int>> A(n, std::vector<int>(n));
    std::vector<int> d;
    for (auto& Row : A) {
        std::generate(Row.begin(), Row.end(), [&dist, &gen] { return dist(gen); });
        std::copy(Row.begin(), Row.end(), std::ostream_iterator <int>(std::cout, "\t"));
        std::cout << '\n';
    }
    int AA; std::cout << "Значение = "; std::cin >> AA;
    for (auto& Row : A)
        for (auto& elem : Row)
            if (elem % AA == 0) d.push_back(elem);
    std::cout << "Массив: ";
    std::copy(d.begin(), d.end(), std::ostream_iterator <int>(std::cout, " "));
    std::cout << "\n";
    system("pause");
} 

По факту код даже не мой, но если у кого есть идеи пишите


Ответы (1 шт):

Автор решения: AR Hovsepyan

Просто догадываюсь, что вам нужно это:

std::default_random_engine gen{ std::random_device()() };
std::uniform_int_distribution<> dist(-10, 10);
int n, m; std::cout << "N, M = "; std::cin >> n >> m;
std::vector<std::vector<int>> A(n, std::vector<int>(m));
std::vector<int> d;
for (auto& Row : A) {
    //выполнить за один проход
    std::generate(Row.begin(), Row.end(),
        [&dist, &gen] { 
            int t = dist(gen);
            std::cout << t << '\t';
            return t; });        
    std::cout << '\n';
}
int AA; 
std::cout << "Value ";
std::cin >> AA;
auto greater_thanx = [&AA](int a) { return a > AA; };      
std::cout << "Result array: ";
for (const auto& Row : A)
    std::copy_if(Row.begin(), Row.end(), std::back_inserter(d), greater_thanx);
//можем сортировать и убрать повторяющийся элементы (если нужно)
std::sort(d.begin(), d.end());
d.erase(std::unique(d.begin(), d.end()), d.end());
std::copy(d.begin(), d.end(), std::ostream_iterator <int>(std::cout, " "));
→ Ссылка