我在C ++中编写了一个现有的Matlab库。 Matlab中有一个波浪号运算符,~vec
是带有1的二进制向量,其中vec
为零,其他地方为0。
更准确地说,我在Matlab中有这些代码行
allDepthIdx = [1:nVec]';
goodIdx = allDepthIdx(~offVec);
goodValues = vec(~offVec);
我正在寻找一种有效的方法来查找索引goodIdx = allDepthIdx(~offVec);
。我有办法使用std::vector
查找1..nVec
而不是offVec
中的索引列表吗?
答案 0 :(得分:0)
我提出了这个解决方案,随意发表评论,或提出你的建议!
// First, I sort offVec
std::sort(offVec.begin(), offVec.end());
int k(0), idx(-1);
std::vector<real32_T> goodDepthIdx;
std::vector<real32_T> goodVal;
// For j in 1..nVec, I check if j is in offVec
for (int j = 0; j < nVec; j++)
{
k = 0;
idx = offVec.at(k);
// I go through offVec as long as element is strictly less than j
while (idx < j)
{
idx = offVec.at(k++);
}
if (idx != j) // idx not in offElemsVec
{
goodDepthIdx.push_back(j); // Build vector with indices
// in 1..nVec not in offVec
goodVal.push_back(vec.at(j)); // Build vector with values
// at these indices
}
}