Создание нового вектора с помощью преобразования

MySQL должен сделать преобразование, чтобы сделать сравнение betwen двух разных типов. Он пытается превратить строку в int и получить цифры из строки, начиная с начала.

У вас было, например,

'ABC12'

результат преобразования строки в int будет 0

16
задан Andrew Grant 9 February 2009 в 05:24
поделиться

1 ответ

1. Вы могли сделать функтор и std::for_each:

struct F {
    F(std::vector<std::pair<bool,int> > &b) : m_b(b){
    }

    void operator()(int x) {
        m_b.push_back(std::make_pair(false, x));
    }

    std::vector<std::pair<bool,int> > &m_b;
};

std::for_each(a.begin(), a.end(), F(b));

, Хотя это может оказаться большей проблемой, чем, он стоит. Но по крайней мере это было бы допускающим повторное использование :).

, Возможно, существует что-то, что могло быть сделано с boost::bind.

2. РЕДАКТИРОВАНИЕ: Я думал, что Вы смогли использовать, связывают с задней вставкой и преобразовывают. что-то вроде этого:

std::transform(a.begin(), a.end(), std::back_inserter(b), boost::bind(std::make_pair<bool, int>, false, _1));

я попробовал это std::bind1st, я думал, что это должно было работать, но я мог только заставить это успешно выполняться с boost::bind. Я буду продолжать пробовать...

3. РЕДАКТИРОВАНИЕ: вот решение неповышения:

std::transform(a.begin(), a.end(), std::back_inserter(b), std::bind1st(std::ptr_fun(std::make_pair<bool, int>), false));

4. РЕДАКТИРОВАНИЕ: вот является C++ 11 решениями (который является моим текущим фаворитом):

std::for_each(begin(a), end(a), [&b](int v) {
    b.push_back(std::make_pair(false, v));
});

или еще более простой:

for(int v : a) {
    b.push_back(std::make_pair(false, v));
}
16
ответ дан 30 November 2019 в 22:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: