目前,我一直在以编程方式从二进制数据文件中读取数据列表,如下所示:
tplR = (double*) malloc(sampleDim[0]*sizeof(double)); printf("tplR = %d\n", fread(tplR, sizeof(double), sampleDim[0], dfile));
但是,由于我想在这些列表上使用find_if()
函数,我需要将tplR转换为stl中的列表类型。就一般的C ++编程实践而言,通常只有在我真正需要时才将tplR放入列表中才是好的做法?
如果我确实创建了另一个成员变量,例如tplRList,那么从tplR将所有sampleDim [0]数量的双精度条目推送到tplRList的最简单方法是什么?逐个推送它们,直到增量计数器等于sampleDim [0]?
提前致谢。
答案 0 :(得分:5)
您可以将find_if与数组一起使用:
bool equals(int p)
{
return p == 9;
}
int main(int argc,char *argv[])
{
int a[10];
for(int i = 0; i < 10; ++i)
{
a[i] = i;
}
int* p = std::find_if(a, a+10, equals);
cout<<*p;
return 0;
}
答案 1 :(得分:1)
你的假设是错误的。 std::find_if()
只需要一个迭代器,不一定是STL迭代器。碰巧,double*
同时支持*和++,所以它也是迭代器。
答案 2 :(得分:0)
bool checkValue(double val); std :: find_if(tplR,tplR + sampleDim [0],checkValue);
答案 3 :(得分:0)
#include <boost/lambda/lambda.hpp\>
using namespace boost::lambda;
static const double whateverValueYouWant(12.);
double *const tplR = (double*) malloc(sampleDim[0]*sizeof(double));
const size_t actualItemsRead = fread(tplR, sizeof(double), sampleDim[0], dfile);
printf("tplR = %d\n", actualItemsRead );
const double *begin = tplR;
const double *const end = tplR + actualItemsRead;
const double *const foundItem = std::find_if( begin, end, _1== whateverValueYouWant);
if( foundItem!=end )
{
//value found
}
else
{
//no such value
}