C++ 从字符串到字符串流再到向量<;int>;
我有一个步骤的示例程序,我想在我的应用程序上实现它。我想把字符串上的int元素分别推回一个向量。我该怎么办C++ 从字符串到字符串流再到向量<;int>;,c++,string,vector,stringstream,C++,String,Vector,Stringstream,我有一个步骤的示例程序,我想在我的应用程序上实现它。我想把字符串上的int元素分别推回一个向量。我该怎么办 #include <iostream> #include <sstream> #include <vector> using namespace std; int main(){ string line = "1 2 3 4 5"; //includes spaces stringstream lineStream(line);
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
int main(){
string line = "1 2 3 4 5"; //includes spaces
stringstream lineStream(line);
vector<int> numbers; // how do I push_back the numbers (separately) here?
// in this example I know the size of my string but in my application I won't
}
#包括
#包括
#包括
使用名称空间std;
int main(){
string line=“1 2 3 4 5”//包括空格
线状流线状流(线状);
向量数;//在这里如何(单独)推回这些数?
//在本例中,我知道字符串的大小,但在我的应用程序中,我不知道
}
这是std::back\u插入器的经典示例
copy(istream_iterator<int>(lineStream), istream_iterator<int>(),
back_inserter(numbers));
copy(istream\u迭代器(lineStream),istream\u迭代器(),
背部插入器(数字);
如果愿意,可以从一开始就创建向量
vector<int> numbers((istream_iterator<int>(lineStream)),
istream_iterator<int>());
向量数((istream_迭代器(lineStream)),
istream_迭代器();
记住在第一个参数周围加括号。编译器认为这是一个函数声明。如果使用向量仅获取数字的迭代器,则可以直接使用istream迭代器:
istream_iterator<int> begin(lineStream), end;
while(begin != end) cout << *begin++ << " ";
istream\u迭代器开始(lineStream),结束;
当(开始!=结束)CUT这是一个完美的例子,imjo,C++的错误。在几乎所有其他语言中,这都是对“”的拆分,每个元素后跟类似.toInt()的内容。相反,我们有一个非常复杂的模板化算法集合正在被应用。OTOH,这种更复杂的方法速度更快,因为可以避免创建临时数组或字符串列表,而且功能更强大——几乎相同的代码可以用于将任何类型的“值范围”(由一对迭代器表示)复制到向量中
@KerrekSB-yours是我见过的第一个将初始值设定项列表传递给推断模板参数的非理论示例。美好的
istream_iterator<int> begin(lineStream), end;
while(begin != end) cout << *begin++ << " ";