Переписать в массив элементы матрицы, больше 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, " "));