2009-05-26 3 views
0

В настоящее время я читал списки данных из двоичного файла данных программно следующим образом:Чтение динамически выделенных массивов в списки

 
tplR = (double*) malloc(sampleDim[0]*sizeof(double)); 
printf("tplR = %d\n", fread(tplR, sizeof(double), sampleDim[0], dfile)); 

Однако, как я хочу использовать find_if() функцию в этих списках, я должен был бы для получения tplR в виде списка в stl. Что касается общей практики программирования на С ++, обычно ли это хорошая практика сделать tplR в списке только тогда, когда мне действительно нужно?

Если я делаю другую переменную-член, например tplRList, какой бы самый простой способ нажать все число записей двойной точности sampleDim [0] в tplRList из tplR? Нажатие их один за другим, пока инкрементный счетчик не будет равен sampleDim [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; 
} 
+0

+1 для избиения меня :) – ralphtheninja

+0

Что делать, если мне также нужно относительное положение p от индикатора? Самый простой способ индексирования включать p- & a [0], чтобы найти положение относительно & a [0]? – stanigator

+1

Да, p-a будет индексом. – Naveen

1

Вы ошибаетесь в своих предположениях. std::find_if() просто требует итератора, не обязательно итератора STL. Как это бывает, double* поддерживает как *, так и ++, поэтому он тоже является итератором.

+0

Есть ли у вас какие-либо примеры использования указателя в качестве итератора? Мне трудно найти условия поиска, чтобы правильно искать примеры. Благодарю. – stanigator

0

BOOL checkValue (двойные вали); std :: find_if (tplR, tplR + sampleDim [0], checkValue);

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 
} 
Смежные вопросы