forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Створення статичної бібліотеки (http://forum.boolean.name/showthread.php?t=17334)

JACUK 03.10.2012 01:05

Створення статичної бібліотеки
 
Вложений: 1
Как в сделать result размеронезависимым и как определить длину массива?

HolyDel 03.10.2012 02:26

Ответ: Створення статичної бібліотеки
 
узнать размер массива:
Код:

sizeof(result) / sizeof(result[0])
но в нашем случае должно быть все по другому.
узнать размер массива по указателю гарантированно никак нельзя (если не пользоваться компиляторозависимыми хаками)

тебе нужно будет его передавать явно.
заголовок функции в либке будет выглядеть как то так:
Код:

void __stdcall returnNumbers_(int size_a,int size_b,int *a, int *b, int *result);
напишем хелпер для удобного вызова:
Код:

template<int A, int B>
void returnNumbers(int (&a)[A],int (&b)[b],int *result)
{
        returnNumbers_(A,B,a,b,result);
}

реализация будет какаято-такая:
Код:

void __stdcall returnNumbers_(int size_a,int size_b,int *a, int *b, int* result)
{                                                                                               
        int count=0;
       
       
        for(int i=0;i<size_a;i++)
        {
                for(int j=0;j<size_b;++j)
                {
                        if(a[i]==b[j])
                        {
                                count++;
                        }
                }
        }
        int index=0;
        for(int i=0;i<size_a;++i)
        {
                for(int j=0;j<size_b;++j)
                {
                        if(a[i]==b[j])
                        {
                                result[index++]=i;                                       
                        }
                }
        }       
        for(int i=count;i<10;i++)
        {
                result[i]=-1;
        }
}

вызывающая сторона не изменится

это все делалось из условия что размер a равен размеру result. если это не так, то нужно аналогичным образом передать размер еще одного массива.

result можно инициализировать так:
int result[sizeof(a) / sizeof(a[0])]={-1};

JACUK 14.10.2012 04:10

Ответ: Створення статичної бібліотеки
 
Вложений: 1
Спасибо уже и сам разобрался! Мой вариант:


Часовой пояс GMT +4, время: 00:49.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot