индексирование вектора c ++ другим вектором - PullRequest
0 голосов
/ 05 марта 2019

прошу прощения за этот очевидно легкий вопрос, но я не смог найти точного ответа на свой вопрос, и я, очевидно, неопытен, чтобы вывести ответ из подобных проблем ...

Предположим, у меня есть следующееситуация

#include <vector>

int main() {
    std::cout << "Test" << std::endl;

    int myints1[] = {1, 1 , 0, 0};
    std::vector<int> vec1 (myints1, myints1 + sizeof(myints) / sizeof(int) );
    int myints2[] = {1, 2 , 3, 4};
    std::vector<int> vec2 (myints, myints2 + sizeof(myints2) / sizeof(int) );

    std::vector<int> resultVec;

    // Now as a result I want to get the resultVec as all entries in vec2 
    // where vec1 == 0, resulting in resultVec = [3,4]
    return 0

}

Как выбрать все записи одного вектора по значению другого вектора?

Ответы [ 2 ]

6 голосов
/ 05 марта 2019

У вас может быть цикл, который увеличивает два итератора. Поскольку ваши коллекции имеют одинаковый тип, вы можете декальрировать как в for, так и потому, что они имеют одинаковый размер, вам нужно только проверить один.

for (auto it1 = vec1.begin(), it2 = vec2.begin(); it1 != vec1.end(); ++it1, ++it2) 
{
     // Use *it1 and *it2
}

Если у вас есть доступ к C ++ 17 и Boost, вы можете использовать хороший дальний

for (auto & [val1, val2] : boost::combine(vec1, vec2))
{
     // Use val1 and val2
}

Обратите внимание, что вы можете использовать {} для инициализации vector с, поэтому я не буду беспокоиться о myints.

std::vector<int> vec1 = {1, 1, 0, 0};
std::vector<int> vec2 = {1, 2, 3, 4};
6 голосов
/ 05 марта 2019

Простое зацикливание индекса должно помочь. В этом коде предполагается, что размер vec2 s как минимум равен vec1.

int main() {
    std::cout << "Test" << std::endl;

    int myints1[] = {1, 1 , 0, 0};
    std::vector<int> vec1 (myints1, myints1 + sizeof(myints) / sizeof(int) );
    int myints2[] = {1, 2 , 3, 4};
    std::vector<int> vec2 (myints, myints2 + sizeof(myints2) / sizeof(int) );

    std::vector<int> resultVec;

    for (unsigned i = 0; i < vec1.size(); ++i) {
        if (!vec1[i]) resultVec.push_back(vec2[i]);
    }
    return 0

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