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

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

Восстановить пароль Регистрация
 
adamo86
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
10.11.2012, 22:13     Поиск и замена в векторе #1
Есть вектор 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++
C++ Поиск и замена текста в файле
Поиск в векторе C++
Поиск и замена текста C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
10.11.2012, 22:18     Поиск и замена в векторе #2
replace http://www.cplusplus.com/reference/algorithm/replace/
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 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
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
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
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
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
 Аватар для DiffEreD
1420 / 757 / 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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2012, 03:04     Поиск и замена в векторе
Еще ссылки по теме:

C++ Поиск в векторе
C++ Поиск в векторе всех элементов со значением, большим заданного с клавиатуры
Поиск и замена файла C++

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

Или воспользуйтесь поиском по форуму:
I.M.
 Аватар для 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
Yandex
Объявления
11.11.2012, 03:04     Поиск и замена в векторе
Ответ Создать тему
Опции темы

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