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

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

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

После каждого отрицательного числа вставьте в вектор отрицательное число -20 и выведите содержимое вектора - C++

05.06.2016, 13:33. Просмотров 192. Ответов 13
Метки нет (Все метки)

После каждого отрицательного числа вставьте в вектор отрицательное число
-20 и выведите содержимое вектора на экран

не пойму как сделать, если я делаю следующее число -20, то у меня всё время будет выполнятся условие vec[i]<0 и соответственно выводится -20.
C++
1
2
3
4
5
6
for (int i = 0; i < vec.size(); i++){
    if (vec[i] < 0){
        vec[i + 1] = -20;
}
    cout << "[" << i << "]" << vec[i] << endl;
}cout << endl;
Как выполнить данное задание? Есть идея оформить ещё один цикл for, но всё равно не представляю как сделать
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2016, 13:33     После каждого отрицательного числа вставьте в вектор отрицательное число -20 и выведите содержимое вектора
Посмотрите здесь:

C++ Умножить каждое число на первое отрицательное число. Добавив к каждому числу половину последнего отрицательного числа
C++ Добавить после каждого максимального числа число x
Дан массив из n целых чисел. До и после каждого числа, кратного 7, вставить число, равное 5 C++
Дан массив из n целых чисел. До и после каждого числа, кратного 7, вставить число, равное 5 C++
Заданный вектор А, состоящий из n элементов. Переставить компоненты вектора, размещенные после самого элемента вектора А C++
C++ Для каждого числа последовательности вывести новое число, которое получится после записи цифр числа в обратном порядке
Создать список, после каждого отрицательного числа вставить в список 0 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
avgoor
 Аватар для avgoor
786 / 428 / 93
Регистрация: 05.12.2015
Сообщений: 1,270
05.06.2016, 14:08     После каждого отрицательного числа вставьте в вектор отрицательное число -20 и выведите содержимое вектора #2
Цитата Сообщение от blocker147 Посмотреть сообщение
вставьте в вектор
А не присвойте значение -20 следующему элементу. Т.е. используйте vec.insert()
А, чтобы не учитывать вставленное число, инкрементируйте i. Итого
C++
1
2
3
4
if (vec[i] < 0) {
    i++;
    vec.insert(vec.begin() + i, -20);
}
blocker147
0 / 0 / 1
Регистрация: 14.12.2015
Сообщений: 120
05.06.2016, 14:19  [ТС]     После каждого отрицательного числа вставьте в вектор отрицательное число -20 и выведите содержимое вектора #3
всё работает только я думаю это неправильный ответ, ведь в задании сказано ПОСЛЕ отрицательного элемента, а не ВМЕСТО
avgoor
 Аватар для avgoor
786 / 428 / 93
Регистрация: 05.12.2015
Сообщений: 1,270
05.06.2016, 14:24     После каждого отрицательного числа вставьте в вектор отрицательное число -20 и выведите содержимое вектора #4
Цитата Сообщение от blocker147 Посмотреть сообщение
только я думаю это неправильный ответ
Где неправильный ответ?

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
#include <iostream>
#include <vector>
#include <algorithm>
#include <random>
#include <iterator>
int main()
{
    const size_t SIZE = 10;
    std::vector<int> vec(SIZE);
    std::default_random_engine re(std::random_device().operator()());
    std::uniform_int_distribution<> ud(-10, 10);
    std::generate(vec.begin(), vec.end(), [&]() { return ud(re); });
 
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
 
    for (int i = 0; i < vec.size(); i++) {
        if (vec[i] < 0) {
            i++;
            vec.insert(vec.begin() + i, -20);
        }
    }
 
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
}
blocker147
0 / 0 / 1
Регистрация: 14.12.2015
Сообщений: 120
05.06.2016, 14:38  [ТС]     После каждого отрицательного числа вставьте в вектор отрицательное число -20 и выведите содержимое вектора #5
а как удалить из вектора все отрицательные числа, отличные от -20.
avgoor
 Аватар для avgoor
786 / 428 / 93
Регистрация: 05.12.2015
Сообщений: 1,270
05.06.2016, 14:42     После каждого отрицательного числа вставьте в вектор отрицательное число -20 и выведите содержимое вектора #6
blocker147,
C++
1
        vec.erase(std::remove_if(vec.begin(), vec.end(), [](auto l) {return l < 0 && l!=-20; }), vec.end());
blocker147
0 / 0 / 1
Регистрация: 14.12.2015
Сообщений: 120
05.06.2016, 14:44  [ТС]     После каждого отрицательного числа вставьте в вектор отрицательное число -20 и выведите содержимое вектора #7
а есть вариант как это сделать через
C++
1
vec.erase();
?
и ещё не пойму почему у меня не хочет выводить элементы вектора:
C++
1
2
3
4
5
6
7
8
9
vector <int> vec;
    for (int i = 1; i <= 10; i++){//какая то ошибка в добавлении элементов в вектор
    vec[i] = rand() % 31 - 15;
    vec.push_back(i);
}
 
for (int i = 0; i < vec.size(); i++){
        cout << "[" << i << "]" << vec.at(i) << endl;
    }
avgoor
 Аватар для avgoor
786 / 428 / 93
Регистрация: 05.12.2015
Сообщений: 1,270
05.06.2016, 14:47     После каждого отрицательного числа вставьте в вектор отрицательное число -20 и выведите содержимое вектора #8
Не от туда скопировал, см пред. сообщение.
blocker147
0 / 0 / 1
Регистрация: 14.12.2015
Сообщений: 120
05.06.2016, 14:52  [ТС]     После каждого отрицательного числа вставьте в вектор отрицательное число -20 и выведите содержимое вектора #9
вот так сработало
C++
1
vec.push_back(rand() % 31 - 15);
и всё таки можно ли как то через
C++
1
2
3
if (vec[i] != -20){
vec.erase();
}
удалить?
avgoor
 Аватар для avgoor
786 / 428 / 93
Регистрация: 05.12.2015
Сообщений: 1,270
05.06.2016, 14:58     После каждого отрицательного числа вставьте в вектор отрицательное число -20 и выведите содержимое вектора #10
Цитата Сообщение от blocker147 Посмотреть сообщение
и всё таки можно ли как то через
Если так уж хочется через цикл:
C++
1
vec.erase(vec.begin() + i);
Но вариант с remove_if - лучше
blocker147
0 / 0 / 1
Регистрация: 14.12.2015
Сообщений: 120
05.06.2016, 15:24  [ТС]     После каждого отрицательного числа вставьте в вектор отрицательное число -20 и выведите содержимое вектора #11
вопрос по поводу этой строки
C++
1
copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
её можно как то через цикл for оформить?
avgoor
 Аватар для avgoor
786 / 428 / 93
Регистрация: 05.12.2015
Сообщений: 1,270
05.06.2016, 15:31     После каждого отрицательного числа вставьте в вектор отрицательное число -20 и выведите содержимое вектора #12
Цитата Сообщение от blocker147 Посмотреть сообщение
её можно как то через цикл for оформить?
Можно по-разному (for(auto i:vec), for(auto it=vec.begin(); it!=vec.end(); it++)). По аналогии с вашими циклами:

C++
1
2
for(int i=0; i<vec.size(); i++)
    std::cout << vec[i] << " ";
blocker147
0 / 0 / 1
Регистрация: 14.12.2015
Сообщений: 120
05.06.2016, 15:42  [ТС]     После каждого отрицательного числа вставьте в вектор отрицательное число -20 и выведите содержимое вектора #13
В STL имеется алгоритм void reverse( Iterator _First, Iterator
_Last ), который можно применять к контейнерами с произвольным
доступом для изменения на обратный порядка следования его элеменов,
заключенных в интервале First … Last. Примените его для того, чтобы
реверсировать пять средних элементов вашего вектора.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2016, 15:49     После каждого отрицательного числа вставьте в вектор отрицательное число -20 и выведите содержимое вектора
Еще ссылки по теме:

Вставьте в массив после каждого столбца из положительных элементов столбец из 0 C++
C++ В матрицу после первого отрицательного элемента каждого столбца вставить число
C++ Найти отрицательное число и после отрицательное число заменить все элемент на нули

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

Или воспользуйтесь поиском по форуму:
avgoor
 Аватар для avgoor
786 / 428 / 93
Регистрация: 05.12.2015
Сообщений: 1,270
05.06.2016, 15:49     После каждого отрицательного числа вставьте в вектор отрицательное число -20 и выведите содержимое вектора #14
blocker147, Ну так примените.
C++
1
2
auto it = vec.begin() + vec.size()/2 - 2;
std::reverse(it, it + 5); // Не забудьте проверить, что в векторе есть 5 элементов
Yandex
Объявления
05.06.2016, 15:49     После каждого отрицательного числа вставьте в вектор отрицательное число -20 и выведите содержимое вектора
Ответ Создать тему
Опции темы

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