[英]Push_back doesn't work
在Visual 2010,Visual 2012和CodeBlocks上尝试失败。 在过去的三天里,我一直在互联网上漫游以寻找答案,但没有任何帮助。
我尝试了两种方法,首先
vector<int> mvec;
int num;
while(cin >> num)
mvec.push_back(num);
cout << mvec[0];
应该输出任何输入的第一个数字。 相反,它什么也不做。 如果我在输入数字序列之后或后面输入字母,它会打印第一个数字。
也尝试过
vector<int> myvector;
int myint;
do {
cin >> myint;
myvector.push_back(myint);
} while (myint);
cout << myvector[0];
再说一遍。 我在谷歌搜索时找到了最后一个片段,它显然对它的创建者有效。
一些在线编译器告诉我1 3 4的输出为1。我发现一个说该程序正在尝试打印一个空向量。
至少有人可以尝试运行其中任何一个并告诉我它们是否起作用? 我将在下面提供完整的程序。
#include <iostream>
#include <vector>
int main()
{
using namespace std;
vector<int> mvec;
int num = 0;
while(cin >> num)
mvec.push_back(num);
cout << mvec[0];
}
如果这很明显,谢谢您的时间和歉意。
如果输入值
1 2 3 4
您需要以ctrl - z (或Unix中的ctrl - d )结尾,该字符为eof才能停止输入。
该代码对我来说很好用(VS2012)
vector<int> mvec;
int num;
while(cin >> num)
mvec.push_back(num);
cout << mvec[0];
只要cin >> num成功,循环就会继续。 换句话说,只有输入一个非数字,循环才会结束,然后打印出第一个数字。
vector<int> myvector;
int myint;
do {
cin >> myint;
myvector.push_back(myint);
} while (myint);
cout << myvector[0];
当使用期望布尔值的整数时,值0为false,其他任何值为true。 仅当输入0时,此循环才会停止,因为这会导致myint变为false。
我不确定您到底想做什么。 如果只想输入一个数字,请不要使用循环(也不需要向量)。如果要输入一定数目的数字,则需要执行一定次数的for循环。
int num;
cout << "How many numbers do you want to enter?" << endl;
if (! (cin >> num))
{
cout << "Error expected a number" << endl;
return -1;
}
vector<int> vec;
for (int i = 0; i < num; i++)
{
int x;
if (! (cin >> x))
{
cout << "Error expected a number" << endl;
return -1;
}
vec.push_back(x);
}
for (int i = 0; i < vec.size(); i++)
{
cout << "number entered: " << vec[i] << endl;
}
您最终需要输入0才能退出循环。 因此1 3 4 0将得到1。但是,您永远不能使用此方法将0放入向量中。 向量中将仅包含[1、3、4]。
首先,第一件事push_back
没错。 :)
您如何期望终止while( cin >> num )
循环? 似乎您使用的是Windows,因此<Ctrl-Z>
会导致cin
失效,因此终止while循环。 在像Un * x这样的系统上,它是<Ctrl-D>
。
输入字母会终止循环的原因是cin
试图将结果放入数字变量中,并且无法将字符串解析为数字。
您的程序对我有用。
(注意:输入0
不会终止循环)。
Bjarne Stroustrup在他的网站上有一个std :: vector和push_back的示例:
http://www.stroustrup.com/bs_faq2.html#simple-program
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
vector<double> v;
double d;
while(cin>>d) v.push_back(d); // read elements
if (!cin.eof()) { // check if input failed
cin.clear(); // clear error state
string s;
cin >> s; // look for terminator string
if (s != "end") {
cerr << "format error\n";
return 1; // error return
}
}
cout << "read " << v.size() << " elements\n";
reverse(v.begin(),v.end());
cout << "elements in reverse order:\n";
for (int i = 0; i<v.size(); ++i) cout << v[i] << '\n';
return 0; // success return
}
您只需输入数字并用空格隔开,完成后输入end
这对初学者很有用,因为它不依赖于不同操作系统的可变文件结尾字符。
您的标准输出缓冲区可能未刷新。 尝试这个:
cout << myVec[0] << flush;
或这个:
cout << myVec[0] << endl;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.