C 向量由另一个向量索引

c++ vector indexing by another vector

本文关键字:向量 索引 另一个      更新时间:2023-10-16

sry提出了这个明显简单的问题,但是我找不到问题的确切答案,显然我没有经验来得出答案表格类似问题...

假设我有以下情况

#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
}

如何根据另一个向量的值选择一个向量的所有条目?

您可以有一个循环,可以增加两个迭代器。由于您的收藏与您可以在for中都可以达到相同的类型,并且由于它们的尺寸相同,因此您只需要检查一个即可。

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

如果您可以访问C 17并提升,则可以使用不错的远程

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

请注意,您可以使用{}来初始化vector s,因此我不会打扰myints

std::vector<int> vec1 = {1, 1, 0, 0};
std::vector<int> vec2 = {1, 2, 3, 4};

只是在索引上循环循环。该代码假定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
}