Ik probeer een lege vector in een lus te maken en wil elke keer dat er iets in die lus wordt ingelezen een element aan de vector toevoegen.
#include <iostream>
#include <vector>
using namespace std;
int main()
{
std::vector<float> myVector();
float x;
while(cin >> x)
myVector.insert(x);
return 0;
}
Maar dit geeft me foutmeldingen.
Antwoord 1, autoriteit 100%
Je moet std::vector::push_back()
in plaats daarvan:
while(cin >> x)
myVector.push_back(x);
// ^^^^^^^^^
en niet std::vector::insert()
, die, zoals je in de link kunt zien, een iterator nodig heeft om de positie aan te geven waar je het element wilt invoegen.
Ook als wat @Joel heeft becommentarieerd, moet u de haakjes in de definitie van uw vectorvariabele verwijderen.
std::vector<float> myVector;
en niet
std::vector<float> myVector();
Als je dat laatste doet, loop je tegen het Meest irritante parse-probleem van C++ aan.
Antwoord 2, autoriteit 9%
Met push_back
:
while(cin >> x)
myVector.push_back(x);
De insert
functie heeft een repeater als eerste argument, die de positie om de insert.
Ook, moet u zich te ontdoen van de haakjes in de verklaring van myVector
std::vector<float> myVector;
Antwoord 3, Autoriteit 6%
Als u gebruik wilt maken myVector.insert()
,
gebruik het als myVector.insert(myVector.end(), x)
. Dit zal x voegen eind myVector.
U kunt invoegen x in het begin door myVector.insert(myVector.begin(), x)
.
Antwoord 4, Autoriteit 4%
Een andere optie is om gebruik te maken std::vector::emplace_back()
in plaats van std::vector::push_back()
. Het maakt een aantal optimalisaties en niet een argument van het type te nemen vector::value_type
, duurt variadic argumenten die worden doorgestuurd naar de bouwer van de bijgevoegde artikel, terwijl push_back
blikje maken onnodige kopieën of bewegingen.
Dit wordt aangetoond in de std :: vector :: emplace_back documentatie en hier is een verwante vraag.
Gebruiksvoorbeeld:
std::vector<int> myVector;
while (cin >> x) {
myVector.emplace_back(x);
}