我正在学习c++,我想用c++实现以下python代码:
C = np.where(A > B)[0]
while len(C) > 0:
d = C[0]
# do something to A[d] and B[d]
C = A > B
A
和 B
都是相同长度的向量。在 C++ 中,我知道如何使用 A
声明和初始化 B
和 vector
,并对 A 和 B 实现中间的“做某事部分”,但我不知道如何比较它们并检查是否A
具有大于 B
的元素,并找到发生这种情况的元素的索引。
<algorithm>
标头中拥有一组丰富的实用函数。如果您遇到问题:
C = np.where(A>B)[0]
可以翻译成 C++,如下所示:
std::size_t index = 0;
auto pos = std::find_if(A.cbegin(), A.cend(), [&index, &B](const int &i){
return i > B[index++];
});
C = A>B
也可以用C++重写如下:
std::size_t index = 0;
auto is_okay = std::all_of(A.cbegin(), A.cend(), [&index, &B](const int &i){
return i > B[index++];
});
所以,它完全可以简化如下:
std::vector<int> A = {/* contents of A */};
std::vector<int> B = {/* contents of B */};
std::size_t index;
auto greaterThanB = [&index, &B](const int &i){
return i > B[index++];
};
// C = np.where(A>B)[0]
index = 0;
auto pos = std::find_if(A.cbegin(), A.cend(), greaterThanB);
// C = A>B
index = 0;
auto is_okay = std::all_of(A.cbegin(), A.cend(), greaterThanB);
另请注意,在此代码中
pos
是 vector<int>::iterator
类型,它指向第一个匹配项。为了将其转换为整数索引,您可以使用 std::distance
函数。
std::size_t index = std::distance(A.cbegin(), pos);