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

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

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

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

23.05.2014, 19:22. Просмотров 310. Ответов 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++
Все элементы вектора, которые встречаются более одного раза, переписать в другой вектор C++
C++ Из одного файла данных получить два массива (один с числами, другой - с буквами)
Организовать запись строк из одного файла в другой через одну C++
C++ Из одного массива сделать два массива, в один перенести четные элементы, в другой нечетные
Скопировать из исходного вектора положительные элементы в один массив, а отрицательные - в другой C++
C++ Скопировать часть одного вектора в другой, в обратном порядке
C++ Строки с палиндромами из входного файла записать в один файл, а без палиндромов - в другой
C++ Дан массив из 10 элементов.Перенести в один другой массив четные числа.Затем перенести в еще один другой масси
Не работает передача объекта из одного класса в другой через return C++
Функция вставляющая элементы одного массива в другой через один C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,917
Записей в блоге: 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;
}
Yandex
Объявления
25.05.2014, 21:11     Вставка одного вектора в другой через один без циклов
Ответ Создать тему
Опции темы

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