ループ内で空のベクターを作成しようとしていますが、そのループに何かが読み込まれるたびにベクターに要素を追加したいと思います。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
std::vector<float> myVector();
float x;
while(cin >> x)
myVector.insert(x);
return 0;
}
しかし、これは私にエラーメッセージを与えています。
代わりに std::vector::Push_back()
を使用する必要があります。
_while(cin >> x)
myVector.Push_back(x);
// ^^^^^^^^^
_
std::vector::insert()
ではなく、リンクからわかるように、要素を挿入する位置を示すイテレータが必要です。
また、 @ Joelがコメントしたもの のように、ベクトル変数の定義の括弧を削除する必要があります。
_std::vector<float> myVector;
_
およびnot
_std::vector<float> myVector();
_
後者を実行すると、C++の Most Vexing Parse の問題が発生します。
myVector.insert()
を使用する場合は、myVector.insert(myVector.end(), x)
のように使用します。これにより、myVectorの最後にxが追加されます。 myVector.insert(myVector.begin(), x)
でxを先頭に挿入できます。
別のオプションは、std::vector::emplace_back()
の代わりにstd::vector::Push_back()
を使用することです。はいくつかの最適化を行い、vector::value_type
型の引数を取りません。追加の項目のコンストラクターに転送される可変引数を取りますが、Push_back
は不要なコピーまたは移動を行うことができます。
これは std :: vector :: emplace_back ドキュメンテーションで実証されており、 here は関連する質問です。
使用例:
std::vector<int> myVector;
while (cin >> x) {
myVector.emplace_back(x);
}