Передача списка чисел в функцию в C ++ без предварительного построения массива? - PullRequest
2 голосов
/ 13 марта 2009

Я пытаюсь построить функцию, которая принимает массив следующим образом:

int inCommon = findCommon({54,56,2,10}, 4);

int findCommon(int nums[], int len){
  for(int i=0; i<len; i++)  cout<<nums[i]<<endl;
  return 1;
} 

Обратите внимание, что на самом деле это не то, что делает моя функция, но я делаю цикл по массиву. Я просто пытаюсь определить, возможно ли передать массив типа {54,56,2,10} вместо того, чтобы создавать массив и передавать его? (как это:

int theArray[]= {54,56,2,10};
int inCommon = findCommon(theArray,4);

Ответы [ 5 ]

5 голосов
/ 13 марта 2009

Это невозможно в данный момент. Однако в следующем стандарте C ++ C ++ 0x это будет сделано с использованием списков инициализаторов:

int findCommon(std::initializer_list<int> nums)
{
    std::initializer_list<int>::iterator it;
    for (it = nums.begin() ; it != nums.end() ; ++it)
    {
        std::cout << *it << std::endl;  
    }
    return 1;
}

См. эту презентацию от Бьярна Страуструпа и эту статью из Википедии

Если вы хотите попробовать функции C ++ 0x, вы можете проверить последние версии gcc , которые поддерживают некоторые из них.

3 голосов
/ 13 марта 2009
2 голосов
/ 13 марта 2009

Вы можете делать то, что хотите, используя списки переменных аргументов .

2 голосов
/ 13 марта 2009

Нет, я считаю, что {} можно использовать только для инициализации массива.

1 голос
/ 13 марта 2009

нет. Это невозможно. Но вы можете создать что-то вроде функции шаблона T * arrayCreator (...), которая создаст ваш массив,
Или оболочка массива с конструктором с неопределенным количеством аргументов.
Или создайте объект, который будет иметь перегруженный оператор coma или << и создаст ваш массив, findCommon (arrCreator () << 1 << 2 << 3 << 5, другие параметры) - этот метод больше типа safe <br> Или ожидание реализации C ++ 0x.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...