Назначение совместимого вектора? - PullRequest
2 голосов
/ 21 января 2020

Предположим, у вас есть вектор одного типа, который вы хотите назначить другому, другого типа?

#include <vector>

int main() {
    std::vector ints = {0,1,2,3};
    std::vector<long long int> llints =  ints;//compile error here
    return 0;
}

Попробуйте сами

Как это возможно? с одной строкой (одно выражение), не используя лямбду, используя только std или boost?

Ответы [ 3 ]

5 голосов
/ 21 января 2020

Если вы хотите построить, вы можете использовать конструктор с двумя итераторами :

std::vector<long long int> llints(ints.begin(), ints.end());

Если вы хотите назначить существующий вектор, вы можете использовать два итератора std::vector::assign функция-член:

std::vector<long long int> llints;
...
llints.assign(ints.begin(), ints.end());
1 голос
/ 21 января 2020

Есть (удивительно скрытый) boost::copy_range

#include <vector>
#include "boost/range/iterator_range.hpp"

int main() {
    std::vector ints = {0,1,2,3};
    auto llints = boost::copy_range<std::vector<long long int>>(ints);
    return 0;
}
1 голос
/ 21 января 2020

Вот одна строка:

std::vector<long long int> llints(begin(ints), end(ints));

Он использует конструктор , который принимает пару итераторов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...