Инициализация структуры в качестве аргумента - PullRequest
0 голосов
/ 24 сентября 2010

Я пытаюсь отправить некоторую структуру в список STL;

struct obj {
  int a;
  int b;
}

list < struct obj> mylist;

struct obj a  = { 0, 1}; 
mylist.push_back ( a);

Есть ли другой способ инициализировать аргумент push_back? Например:

mylist.push_back ( struct obj a ={0, 1});

g ++ говорит мне: ожидаемое первичное выражение перед "struct";

Ответы [ 2 ]

4 голосов
/ 24 сентября 2010

Определить конструктор на struct obj:

obj::obj(int a, int b) // : initializers
{
 // Implementation
}

Использование

int val1, val2;
mylist.push_back(obj(val1, val2));

C ++ 0x имеет новых способов инициализации inline . Я видел утверждения, в том числе из Stroustrup , что контейнеры STL могут быть инициализированы с использованием std::initializer_list<T>, и в этом случае это будет выглядеть примерно так в вашем случае, когда T равно obj.

std::list mylist({obj(val1, val2), obj(val3, val4)});
0 голосов
/ 24 сентября 2010

Почему бы вам не дать вашей структуре конструктор с параметрами a и b? Если вы используете списки инициализаторов, это должно быть так же быстро, как ваш старый код, и вы можете сказать

mylist.push_back(obj(a,b));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...