Quero saber como posso acrescentar valores ao meu vector de estruturas utilizando o método `push_back
struct subject
{
string name;
int marks;
int credits;
};
vector<subject> sub;
Então agora como posso acrescentar-lhe elementos?
Eu tenho uma função que inicializa o nome da cadeia (nome do sujeito a ela)
void setName(string s1, string s2, ...... string s6)
{
// how can i set name too sub[0].name= "english", sub[1].name = "math" etc
sub[0].name = s1 // gives segmentation fault; so how do I use push_back method?
sub.name.push_back(s1);
sub.name.push_back(s2);
sub.name.push_back(s3);
sub.name.push_back(s4);
sub.name.push_back(s6);
}
Chamada de função
setName("english", "math", "physics" ... "economics");
Criar vector, elemento push_back, depois modificá-lo como tal:
struct subject {
string name;
int marks;
int credits;
};
int main() {
vector<subject> sub;
//Push back new subject created with default constructor.
sub.push_back(subject());
//Vector now has 1 element @ index 0, so modify it.
sub[0].name = "english";
//Add a new element if you want another:
sub.push_back(subject());
//Modify its name and marks.
sub[1].name = "math";
sub[1].marks = 90;
}
Não se pode aceder a um vector com [#] até que exista um elemento no vector nesse índice. Este exemplo povoa o [#] e depois modifica-o.
Não se pode aceder a elementos de um vector vazio por subscrito.
Verificar sempre se o vector não está vazio & o índice é válido utilizando o []
operador em std::vector
.
[]
não acrescenta elementos se nenhum existir, mas provoca um Comportamento Indefinido se o índice for inválido.
Deve criar um objecto temporário da sua estrutura, preenchê-lo e depois adicioná-lo ao vector, utilizando vector::push_back()
subject subObj;
subObj.name = s1;
sub.push_back(subObj);