2015-01-27 2 views
1

Я пытаюсь добавить два значения в вектор пользовательского типа, не создавая переменную этого типа.Нельзя добавить элементы типа struct в вектор?

typedef struct duo{ 
    int uniqueID; 
    double data; 
}; 

vector<duo> myVector; 
myVector.push_back({1,1.0}); 

Но это не позволит?

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

vector<duo> myVector; 
duo temp = {1,1.0}; 
myVector.push_back(temp); 

Кроме того ... почему я не могу это сделать?

duo temp; 
temp = {1,1.0}; 

, но я могу это сделать:

duo temp = {1,1.0}; 

???

+0

Какой у вас компилятор? – user657267

+0

Ваш код должен компилироваться, если вы используете компилятор C++ 11. И это 'typedef' бесполезно. – Praetorian

+0

Пожалуйста, не редактируйте, чтобы включить несколько вопросов. Если у вас есть новый вопрос, спросите его отдельно. –

ответ

0

Если вы используете компилятор C++ 11, скомпилируйте файл .cpp с помощью g++ -std=c++11. Также удалите typedef из определения struct duo.

В противном случае вы можете создать параметризованный конструктор для duo, а затем использовать конструктор для push_back объектов duo в вектор.

Код:

struct duo { 
    int uniqueID; 
    double data; 
    duo(int _uniqueID, double _data) : uniqueID{_uniqueID}, data{_data} {} 
}; 

vector<duo> myVector; 
myVector.push_back(duo(1,1.0)); //This compiles. 

Надежда, что помогает.

+0

Я не уверен, где добавить этот 'g ++ ... '. – Tez

+0

Если вы находитесь в Linux, откройте Terminal; Если в Windows откройте командную строку. Вернитесь в каталог, в котором присутствует ваш .cpp-файл. Пусть имя файла .cpp будет x.cpp. Итак, напишите 'g ++ -std = C++ 11 x.cpp -o x', если в Linux ** или **' g ++ -std = C++ 11 x.cpp -o x.exe', если в Windows. Тогда у вас не будет ошибок в компиляции. – shauryachats

1

Вы можете избежать создания временного объекта при создании своего вектора с помощью std::vector::emplace_back().

Ниже приведен образец кода.

class duo { 
public: 
    duo(int uniqueID_, double data_) 
     : uniqueID(uniqueID_) 
     , data(data_) {} 

private:   
    int uniqueID; 
    double data; 
}; 


int main() { 
    vector<duo> myVector; 
    myVector.emplace_back(1, 1.0); 
} 
Смежные вопросы