Как заменить конкретные значения в векторе в C ++? - PullRequest
3 голосов
/ 28 марта 2012

У меня есть вектор с некоторыми значениями (3, 3, 6, 4, 9, 6, 1, 4, 6, 6, 7, 3), и я хочу заменить каждые 3 на 54 или каждые 6 на например, 1 и т. д.

Итак, сначала мне нужно пройти через вектор, получить значение [i], выполнить поиск и заменить каждые 3 на 54, но все равно сохранить значение positions.std::set vector::swap хороший способ? Я даже не уверен, как начать это :( Я не могу использовать push_back, так как это не приведет к правильному порядку значений, поскольку это важно.

Пожалуйста, будьте проще; Я только начинающий :) 1008 *

Ответы [ 4 ]

12 голосов
/ 28 марта 2012

Инструмент для работы: std::replace:

std::vector<int> vec { 3, 3, 6, /* ... */ };
std::replace(vec.begin(), vec.end(), 3, 54); // replaces in-place

См. Это в действии .

6 голосов
/ 28 марта 2012

Вы можете использовать алгоритм replace или replace_if .

Онлайн-образец:

#include<vector>
#include<algorithm>
#include<iostream>
#include<iterator>

using namespace std;

class ReplaceFunc
{
     int mNumComp;
     public:
         ReplaceFunc(int i):mNumComp(i){}
         bool operator()(int i)
         {
              if(i==mNumComp)
                  return true;
              else
                  return false;
         }
};


int main()
{
    int arr[] = {3, 3, 6, 4, 9, 6, 1, 4, 6, 6, 7, 3};
    std::vector<int> vec(arr,arr + sizeof(arr)/sizeof(arr[0]));

    cout << "Before\n";
    copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, "\n"));

    std::replace_if(vec.begin(), vec.end(), ReplaceFunc(3), 54);

    cout << "After\n";
    copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, "\n"));

    return 0;
}
1 голос
/ 28 марта 2012

Вы можете перебрать каждый элемент списка.

std::vector<int> vec{3, 3, 6, 4, 9, 6, 1, 4, 6, 6, 7, 3};
for(int n=0;n<vec.size();n++)
    if(vec[n]==3)
        vec[n]=54;
0 голосов
/ 28 марта 2012

Использовать алгоритм STL for_each.Цикл не требуется, и вы можете сделать это за один раз с функциональным объектом, как показано ниже.

http://en.cppreference.com/w/cpp/algorithm/for_each

Пример:

#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
using namespace std;

void myfunction(int & i)
{
    if (i==3)
        i=54;
    if (i==6)
        i=1;
}


int main()
{
    vector<int> v;
    v.push_back(3);
    v.push_back(3);
    v.push_back(33);
    v.push_back(6);
    v.push_back(6);
    v.push_back(66);
    v.push_back(77);
    ostream_iterator<int> printit(cout, " ");

    cout << "Before replacing" << endl;
    copy(v.begin(), v.end(), printit);

    for_each(v.begin(), v.end(), myfunction)
        ;

    cout << endl;
    cout << "After replacing" << endl;
    copy(v.begin(), v.end(), printit);
    cout << endl;
}

Выход:

Before replacing
3 3 33 6 6 66 77
After replacing
54 54 33 1 1 66 77
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...