将动态分配的数组读入列表

时间:2009-05-26 07:17:58

标签: c++

目前,我一直在以编程方式从二进制数据文件中读取数据列表,如下所示:

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]?

提前致谢。

4 个答案:

答案 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
}