как устранить ошибку C2440 «инициализация»: невозможно преобразовать из «_Ty» в «_Objty» - PullRequest
0 голосов
/ 01 августа 2020

Я пытаюсь написать алгоритм для поиска подмножества данного вектора, у которого есть определенная запрошенная сумма. Я пытаюсь использовать технику «встретиться посередине», как описано в «Руководстве конкурентоспособного программиста» Антти Лааксонена. вот мой код:

vector<int> subset_with_sum1(vector<int> set, int requested_sum) {
    int half = set.size() / 2;
    vector<int> set_a(set.begin(), set.begin() + half),
        set_b(set.begin() + half, set.end());
    auto subsets_a = get_subsets1(set_a),
        subsets_b = get_subsets1(set_b);
    vector<int> sums_a(subsets_a.size()), sums_b(subsets_b.size());
    transform(
        subsets_a.begin(),
        subsets_a.end(),
        sums_a.begin(),
        sum_vector
    );
    transform(
        subsets_b.begin(),
        subsets_b.end(),
        sums_b.begin(),
        sum_vector
    );
    for (int i = 0; i < sums_a.size(); i++)
        if (sums_a[i] == requested_sum)
            return subsets_a[i];
    for (int i = 0; i < sums_b.size(); i++)
        if (sums_b[i] == requested_sum)
            return subsets_b[i];
    for (int i = 0; i < sums_a.size(); i++)
        for (int j = 0; j < sums_b.size(); j++)
            if ((sums_a[i] + sums_b[j]) == requested_sum) {
                vector<int> temp(subsets_a.begin(), subsets_a.end());
                temp.insert(temp.end(),subsets_b.begin(), subsets_b.end());
                return temp;
            }
}

этот код вызывает ошибку, указанную в заголовке. вот полная ошибка:

Error   C2440   'initializing': cannot convert from '_Ty' to '_Objty'   PracticeIOI C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\include\xmemory 671

эта ошибка появляется в других вопросах на этом веб-сайте, но всегда в отношении некоторых определенных пользователем классов и указателей, ни один из которых я не использую. то же самое касается Microsoft docs . Кроме того, поскольку ошибка возникает в файле STL, я даже не могу знать, какая именно строка c моего кода вызывает ее. как я могу это исправить?

РЕДАКТИРОВАТЬ: я не включил код, необходимый для запуска функции, вот он:

vector<vector<int>> get_subsets1(vector<int> nums) {
    int full = 1 << nums.size();
    bitset<8 * sizeof(int)> set;
    vector<vector<int>> subsets;
    vector<int> temp;
    for (int i = 0; i < full; i++) {
        set = bitset<8 * sizeof(int)>(i);
        temp = vector<int>();
        for (int j = 0; j < nums.size(); j++)
            if (set[j])
                temp.push_back(nums[j]);
        subsets.push_back(temp);
    }
    return subsets;
}
int sum_vector(vector<int> vec) {
    return accumulate(vec.begin(), vec.end(), 0);
}

1 Ответ

1 голос
/ 01 августа 2020

Эта проблема возникает в следующих строках:

vector<int> temp(subsets_a.begin(), subsets_a.end());
temp.insert(temp.end(),subsets_b.begin(), subsets_b.end());

Здесь temp относится к типу vector<int>, а subsets_a и subsets_b относятся к типу vector<vector<int>>. Поскольку типы значений - int и vector<int> соответственно, они не совпадают, и поэтому это не компилируется.

В зависимости от того, что вам нужно, либо сделайте temp a vector<vector<int>>, или скопируйте индивидуальные int s в каждый vector из subsets_a и subsets_b в temp.

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