Используя контейнеры и алгоритмы стандартной библиотеки шаблонов, решить
следующие задачи (использовать только алгоритмы стандартной библиотеки шаблонов):
Даны две последовательности целых чисел. Удалить из первой последовательности все элементы, встречающиеся во второй. Во второй последовательности
после каждого элемента, кратного, вставить новый элемент. Отсортировать
данные последовательности. Объединить их в одну отсортированную последовательность.
На C++.
#include < iostream >
#include < vector >
#include < iterator >
#include < algorithm >
using namespace std;
vector foo(const vector& A1, const vector& A2)
{
vector box;
for (const auto Q1 : A1) if (find(A1.begin(), A2.end(), Q1) == A2.end()) box.push_back(Q1);
return box;
}
int main()
{
int Q1, Q2, N1, N2, x;
vector A1, A2; // объявляем интовые вектора
vector ::iterator B1, B2; // обращаемся к интовым ячейкам STL
cout <<" x = ";
cin >> x;
cout << "Введите количество ячеек 1-ог вектора ";
cin >> N1; // вводим количество ячеек 1-ог вектора
for (int i = 0; i < N1; i++)
{
cout <<"Введите элемент с номером "<< i <<": ";
cin >> Q1; // Заполняем ячейки 1-ог вектора числами
A1.push_back(Q1); // освобождаем место в 1-ом векторе
}
cout << "Введите количество ячеек 2-ог вектора ";
cin >> N2; // вводим количество ячеек 2-ог вектора
for (int i = 0; i < N2; i++)
{
cout <<"Введите элемент с номером "<< i <<": ";
cin >> Q2; // Заполняем ячейки 2-ог вектора числами
A2.push_back(Q2); // освобождаем место во 2-ом векторе
}
/* ------------------------------------
1-ое условие
------------------------------------*/
{
A1 = foo(A1, A2);
for (const auto Q1 : A1) cout << Q1 << ' ';
cout <<'\n';
cout << endl;
}
/* ------------------------------------
2-ое условие
------------------------------------*/
{
}
/* ------------------------------------
3-е условие
------------------------------------*/
{
}
/* ------------------------------------
4-ое условие
------------------------------------*/
{
}
return 0;
}
1-ое условие по какой-то непонятной мною причиной не работает.
Остальные вообще беспонятия как делать.
1-ое условие:
Удалить из первой последовательности все элементы, встречающиеся во второй.
2-ое условие:
Во второй последовательности после каждого элемента, кратного X, вставить новый элемент.
3-е условие:
Отсортировать данные последовательности.
4-ое условие:
Объединить их в одну отсортированную последовательность.
Если кто-то знает как сделать хотя бы одно условие прошу помочь.
Другие языки программирования и технологии
Алгоритмы стандартной библиотеки шаблонов. Вектора в C++.
1) std::vector< int> v1 {1,2,3,4,5,6,7,8,9,10,11,12, 13};
std::vector< int> v2 {1,2,3,5,55, 7,8,11,12};
v1.erase(std::remove_if(v1.begin(), v1.end(), [&v2](int n){ return std::find(v2.begin(),v2.end(), n) == v2.end();} ), v1.end());
std::vector< int> v2 {1,2,3,5,55, 7,8,11,12};
v1.erase(std::remove_if(v1.begin(), v1.end(), [&v2](int n){ return std::find(v2.begin(),v2.end(), n) == v2.end();} ), v1.end());
#include <string>
#include <list>
#include <iostream>
#include <random>
#include <algorithm>
#include <iterator>
void show(std::string_view msg, const std::list<int>& seq) {
std::cout << msg;
copy(seq.begin(), seq.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout.put('\n');
}
void fill(std::list<int>& box) {
std::uniform_int_distribution<> uid(1, static_cast<int>(box.size()));
std::mt19937 gen{ std::random_device()() };
generate(box.begin(), box.end(), [&] { return uid(gen); });
}
void remove(std::list<int>& a, const std::list<int>& b) {
for_each(b.begin(), b.end(), [&a](int n) { a.remove(n); });
}
int input(std::string_view msg) {
std::cout << msg;
int value;
std::cin >> value;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
return abs(value);
}
void insert(std::list<int>& box, std::list<int>::iterator iter, const int value) {
auto l = static_cast<int>(box.size() + 1);
auto r = static_cast<int>(box.size() << 1);
std::uniform_int_distribution<> uid(l, r);
std::mt19937 gen{ std::random_device()() };
auto pred = [value](int x) { return 0 == x % value; };
iter = find_if(iter, box.end(), pred);
if (iter != box.end()) {
iter = box.insert(next(iter), uid(gen));
insert(box, iter, value);
}
}
int main() {
system("chcp 1251 > nul");
const std::string frst = "Первая: ";
const std::string scnd = "Вторая: ";
puts("\t1. Процедура заполнения... \n");
auto first_size = input("Введите размер первой последовательности: ");
std::list<int> first(first_size);
fill(first);
show(frst, first);
auto second_size = input("Введите размер второй последовательности: ");
std::list<int> second(second_size);
fill(second);
show(scnd, second);
puts("\n\t2. Процедура удаления... \n");
remove(first, second);
show(frst, first);
puts("\n\t3. Процедура вставки... \n");
auto x = input("Введите X: ");
insert(second, second.begin(), x);
show(scnd, second);
puts("\n\t4. Процедура сортировки... \n");
first.sort();
show(frst, first);
second.sort();
show(scnd, second);
puts("\n\t5. Процедура слияния... \n");
first.merge(second);
show("Результат: ", first);
std::cout.put('\n');
system("pause");
}
#include <list>
#include <iostream>
#include <random>
#include <algorithm>
#include <iterator>
void show(std::string_view msg, const std::list<int>& seq) {
std::cout << msg;
copy(seq.begin(), seq.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout.put('\n');
}
void fill(std::list<int>& box) {
std::uniform_int_distribution<> uid(1, static_cast<int>(box.size()));
std::mt19937 gen{ std::random_device()() };
generate(box.begin(), box.end(), [&] { return uid(gen); });
}
void remove(std::list<int>& a, const std::list<int>& b) {
for_each(b.begin(), b.end(), [&a](int n) { a.remove(n); });
}
int input(std::string_view msg) {
std::cout << msg;
int value;
std::cin >> value;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
return abs(value);
}
void insert(std::list<int>& box, std::list<int>::iterator iter, const int value) {
auto l = static_cast<int>(box.size() + 1);
auto r = static_cast<int>(box.size() << 1);
std::uniform_int_distribution<> uid(l, r);
std::mt19937 gen{ std::random_device()() };
auto pred = [value](int x) { return 0 == x % value; };
iter = find_if(iter, box.end(), pred);
if (iter != box.end()) {
iter = box.insert(next(iter), uid(gen));
insert(box, iter, value);
}
}
int main() {
system("chcp 1251 > nul");
const std::string frst = "Первая: ";
const std::string scnd = "Вторая: ";
puts("\t1. Процедура заполнения... \n");
auto first_size = input("Введите размер первой последовательности: ");
std::list<int> first(first_size);
fill(first);
show(frst, first);
auto second_size = input("Введите размер второй последовательности: ");
std::list<int> second(second_size);
fill(second);
show(scnd, second);
puts("\n\t2. Процедура удаления... \n");
remove(first, second);
show(frst, first);
puts("\n\t3. Процедура вставки... \n");
auto x = input("Введите X: ");
insert(second, second.begin(), x);
show(scnd, second);
puts("\n\t4. Процедура сортировки... \n");
first.sort();
show(frst, first);
second.sort();
show(scnd, second);
puts("\n\t5. Процедура слияния... \n");
first.merge(second);
show("Результат: ", first);
std::cout.put('\n');
system("pause");
}
Похожие вопросы
- Нет библиотеки Dev-C++ нет библиотеки mach.h компилятор MinGW где скачать стандартные библиотеки, и как установить?
- Алгоритм цикла с неизвестным числом повторений. C++.
- с++. нужно для списков из библиотеки шаблонов перегрузить оператор==. делаю как в классах - хрен. подскажите, что-нибудь
- Уместно ли изменять/дополнять стандартные библиотеки, если видишь, что они могут быт более эффективны, чем есть?
- С++. Как запихнуть класс-шаблон бинарной кучи в библиотеку?
- Паскаль! Даны векторы: a={xn}, b={yn}, c={zn}, d={dn}. Построить матрицу К, сторонами которой являются упорядочены в
- [C++] Сложный алгоритм :(
- C++ шаблоны
- C++ Сортировка в сортировке вектора экземпляров структуры
- Пишут ли еще программы на голом winapi и c++? Или сейчас все пишут при помощи библиотека, таких как Qt?
кроме второго условия.