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

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

Войти
Регистрация
Восстановить пароль
 
adamo86
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
#1

Поиск и замена в векторе - C++

10.11.2012, 22:13. Просмотров 1056. Ответов 9
Метки нет (Все метки)

Есть вектор v, который содержит следующие значения элементов:
C++
1
v[1, 1, 5, 3, 1, 5, 1]
Нужно найти и заменить значения 5 на 1, чтобы в итоге получилось:
C++
1
v[1, 1, 1, 3, 1, 1, 1]
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2012, 22:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поиск и замена в векторе (C++):

Сравнение векторов и замена слов в векторе - C++
Вводим n-е количество слов в векторе str. Имеется второй вектор dislike с определенными словами. Надо сравнить вектор str с вектором...

Поиск в векторе - C++
Есть вектор v Нужно задать поиск значения 6 и присвоить переменной i номер элемента вектора v, в котором найдена искомое значение 6. В...

Поиск в векторе - C++
Есть вектор v: v = 0; v = 1; v = 2; v = 4; v = 6; Как с помощью алгоритма find узнать есть ли в векторе число 8, между...

Быстрый поиск в векторе из pair - C++
Пытаюсь сделать вектор: vector< pair<string, string> > myVect; По идее, проще воспользоваться чем-то вроде map или unordered_map,...

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

Поиск по возрасту в векторе структур - C++
сделал программу телефонную книгу есть добавление контактов вывод контактов пытаюсь сделать поиск по возрасту вот сама программа ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
10.11.2012, 22:18 #2
replace http://www.cplusplus.com/reference/algorithm/replace/
DiffEreD
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
10.11.2012, 22:21 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <vector>
#include <algorithm>
 
using std::cout;
using std::endl;
int main()
{
    int arr[7] = {1, 1, 5, 3, 1, 5, 1};
    std::vector<int> v(arr, arr+7);
    cout<<"Before: ";
    for (const int& x : v) cout<<x<<" ";
    std::replace_if(v.begin(), v.end(), [] (int n) {return n == 5;}, 1);
    cout<<"\nAfter:  ";
    for (const int& x : v) cout<<x<<" ";
    cout<<endl;
    system("pause");
    return 0;
}
adamo86
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
10.11.2012, 23:12  [ТС] #4
Задача теперь немного усложнилась:
Есть вектор v, который содержит следующие значения элементов:
C++
1
v[1, 1, 5, 3, 1, 5, 1]
1) Сначала необходимо найти и заменить значения 5 на 1. Получится:
C++
1
v[1, 1, 1, 3, 1, 1, 1]
2) Теперь же необходимо сделать поиск значения 1 и заменить его на 3. Причем поиск должен обходит номера элементов, значения которых уже менялись (это v[2] и v[5]). В итоге должно получится:
C++
1
v[3,3,1,3,3,1,3]
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
10.11.2012, 23:31 #5
adamo86 Какие у тебя идеи?
adamo86
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
10.11.2012, 23:36  [ТС] #6
Цитата Сообщение от David Sylva Посмотреть сообщение
adamo86 Какие у тебя идеи?
Для начала: как задать поиск в векторе v значения 5 и присвоить переменной i, номер элемента v в которой находится 5?
То есть сначала i=2 (v[2]=5)
потом i=5 (v[5]=5)
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
10.11.2012, 23:52 #7
Цитата Сообщение от adamo86 Посмотреть сообщение
Для начала: как задать поиск в векторе v значения 5 и присвоить переменной i, номер элемента v в которой находится 5?
То есть сначала i=2 (v[2]=5)
потом i=5 (v[5]=5)
не понял, как ты хочешь обходить элементы которые уже были изменены?
adamo86
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
10.11.2012, 23:57  [ТС] #8
Цитата Сообщение от David Sylva Посмотреть сообщение
не понял, как ты хочешь обходить элементы которые уже были изменены?
Я хочу создать копию вектора v - вектор v2. Искать значения в векторе v, а изменять в векторе v2.
DiffEreD
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
11.11.2012, 02:04 #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <vector>
#include <algorithm>
 
int main()
{
    int arr[7] = {1, 1, 5, 3, 1, 5, 1};
    std::vector<int> v(arr, arr+7);
    std::cout<<"Before: ";
    for (const int& x : v) std::cout<<x<<" ";
    auto func = [] (int& n) {if (n == 5) n = 1; else if (n == 1) n = 3;};
    std::for_each(v.begin(), v.end(), func);
    std::cout<<"\nAfter:  ";
    for (const int& x : v) std::cout<<x<<" ";
    std::cout<<std::endl;
    system("pause");
    return 0;
}
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
11.11.2012, 03:04 #10
adamo86, а почему нельзя вначале поменять 1 на 3, а потом 5 на 1?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <algorithm>
#include <array>
#include <iostream>
#include <vector>
 
int main()
{
    std::array<int, 7> arr = {{1, 1, 5, 3, 1, 5, 1}};
    std::vector<int> v(arr.cbegin(), arr.cend());
    
    std::cout<<"Before: ";
    for (const int& x : v)
       std::cout << x << " ";
       
    std::replace(v.begin(), v.end(), 1, 3);
    std::replace(v.begin(), v.end(), 5, 1);
    
    std::cout<<"\nAfter:  ";
    for (const int& x : v)
       std::cout << x << " ";
    
    return 0;
}
http://liveworkspace.org/code/71ffca...088c74edfc1db6
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2012, 03:04
Привет! Вот еще темы с ответами:

Поиск заданной строки в векторе - C++
Дан вектор указателей на строки завершающиеся нулевым символом. Написать функцию*поиска*заданной*строки*в*векторе. Решите кто- нибудь:)

Поиск самого большого элемента в векторе - C++
Здравствуйте. Такой вот не сильно сложный вопрос: Как найти в vector&lt;int&gt;v самое большое число ? Я могу написать &quot;велосипед&quot;, но в...

Лямбда-выражение и поиск значения в векторе - C++
Необходимо реализовать простенькую программку поиска значения в векторе. Но сделать это нужно с помощью лямбда-выражения. Как? ...

Поиск минимума над главной диагональю в двумерном векторе - C++
Нужно найти минимум в двумерном векторе, причем поиск нужно ввести только над главной диагональю матрицы (матрица квадратная). Собственно...


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

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

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