Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Shiman_Gleb
0 / 0 / 0
Регистрация: 15.05.2014
Сообщений: 51
#1

Вставка одного вектора в другой через один без циклов - C++

23.05.2014, 19:22. Просмотров 339. Ответов 3
Метки нет (Все метки)

Поставили интересную задачу: вставить элементы одного вектора в другой без использования циклов. Рекурсия считается как цикл. Пользоваться можно for_each. Для вставки элементов нужно, как я понял, пользоваться функцией insert, но она вставляет только в одну позицию. Сказали, что нужно работать через итератор, но как сделать так, чтобы положение вставки менялось? Вот код, если что:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <vector>
#include <fstream>
#include <algorithm>
#include <iterator>
using namespace std;
vector <int> minuses;
vector <int> pluses;
int pos=1;
fstream f;
bool gtz(int num)
{
return num>=0;
}
bool ltz(int num)
{
return num<0;
}
int main()
{
 
f.open("input.txt");
vector<int> source((istream_iterator<int>(f)),(istream_iterator<int>())); //Копирую элементы из текстового файла
f.close();
sort(source.begin(),source.end(),greater <int> ()); //Сортирую
copy_if(source.begin(),source.end(),back_inserter(pluses),gtz); //В вектор pluses вставляю положительные
copy_if(source.begin(),source.end(),back_inserter(minuses),ltz); //В вектор minuses - отрицательные
pluses.insert(pluses.begin()+1,minuses.begin(),minuses.end()); //Заносит на 2-ую позицию pluses все элементы из minuses
for (int i=0; i<pluses.size(); i++) cout<<pluses[i]<<" "; //Выводит элементы вектора pluses, с вставленными элементы из minuses
f.close();
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2014, 19:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вставка одного вектора в другой через один без циклов (C++):

Функция вставляющая элементы одного массива в другой через один - C++
Добрый вечер форум:) Подскажите пожалуйста сдавал зачет по по инфе,на теорию то ответил))Скажите что тут нужно было сделать в 3 задании,а...

Из одного вектора в другой - C++
Есть у меня вектор уникальных указателей std::vector&lt;std::unique_ptr&lt;Polygon&gt;&gt; ObjList; Так же имеется класс, в котором тоже...

Вставка одного массива в другой - C++
Есть вот такие вот 2 задачки- 1) даны 2 массива А и В. нужно вставить один массив в другой, при этом - мы сами вводим номер элемента,...

Перенос элементов из одного массива в другой (ассемблерная вставка) - C++
Перенос элементов из одного массива в другой, так чтобы в правой части были элементы меньше 0, а слева больше 0 ... const int n =...

Скопировать часть одного вектора в другой, в обратном порядке - C++
как скопировать часть одного вектора в другой, при этом отсчет с конца V1 = 1,2,3,4,5 v2 должен ровняться 5,4,3

Скопировать из исходного вектора положительные элементы в один массив, а отрицательные - в другой - C++
Переписать отдельно в разные массивы положительные и отрицательные элементы вектора.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
23.05.2014, 19:26 #2
Цитата Сообщение от Shiman_Gleb Посмотреть сообщение
Пользоваться можно for_each
а это типа не цикл?
Shiman_Gleb
0 / 0 / 0
Регистрация: 15.05.2014
Сообщений: 51
23.05.2014, 19:36  [ТС] #3
Сказали что for_each можно. Но это мне как-то не помогает.
Shiman_Gleb
0 / 0 / 0
Регистрация: 15.05.2014
Сообщений: 51
25.05.2014, 21:11  [ТС] #4
А, всё, разобрался. Вот что получилось:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <vector>
#include <fstream>
#include <algorithm>
#include <iterator>
using namespace std;
vector <int> minuses;
vector <int> pluses;
int pos=1;
fstream f;
void insert_it(int &num)
{
    pluses.insert(pluses.begin()+pos, num);
    pos+=2;
}
bool gtz(int num)
{
    return num>=0;
}
bool ltz(int num)
{
    return num<0;
}
int main()
{
    
    f.open("input.txt");
    vector<int> source((istream_iterator<int>(f)), (istream_iterator<int>()));
    f.close();
    sort(source.begin(), source.end(), greater <int> ());
    copy_if(source.begin(), source.end(), back_inserter(pluses), gtz);
    copy_if(source.begin(), source.end(), back_inserter(minuses), ltz);
    int pl=pluses.size(), mi=minuses.size();
    if (minuses.size()>pluses.size()) swap(pluses,minuses);
    
    for_each(minuses.begin(), minuses.end(), insert_it);
    f.open("output.txt");
    copy(pluses.begin(), pluses.end(), ostream_iterator<int>(f, " "));
    f<<endl;
    f<<"Amount of plus elements is "<<pl<<endl;
    f<<"Amount of minus elements is "<<mi;
    f.close();
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2014, 21:11
Привет! Вот еще темы с ответами:

Все элементы вектора, которые встречаются более одного раза, переписать в другой вектор - C++
Все элементы вектора V,которые встречаються более одного раза ,переписать в другой вектор. Задача на С++ помогите решить.

Из одного файла данных получить два массива (один с числами, другой - с буквами) - C++
Имеется файл данных, где первая колонка - буквы, а остальные три колонки - числа. Надо записать буквы в один массив, а числа - в другой...

Как передать данные из одного процесса в другой без сокетов - C++
как можно передать аргументы функции main другой программы из той которая вызывает другой процесс, отвечающий за ту main куда нужно...

Представление полей одного класса через другой - C++
Задача следующего сожержания: Как реализовать поля класса bull через класс Time? Предварительный код: #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.05.2014, 21:11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru