[英]c++ vector indexing by another vector
很想问这个显然很简单的问题,但是我找不到我问题的确切答案,而且我显然没有经验,无法从类似问题中得出答案...
假设我有以下情况
#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
}
如何通过另一个向量的值选择一个向量的所有条目?
仅在索引上循环就可以解决问题。 此代码假定vec2
的大小至少与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
}
您可以有一个递增两个迭代器的循环。 因为您的集合是相同的类型,所以您可以在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};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.