我注意到C++向量構造函數的一些奇怪行爲,任何人都可以爲我解釋嗎?謝謝。奇怪的C++向量構造函數的行爲
代碼段1作品:
#include <string>
#include <vector>
#include <iostream>
#include <istream>
#include <ostream>
#include <iterator>
#include <sstream>
#include <algorithm>
using namespace std;
int main()
{
string str = "The quick brown fox";
stringstream strstr(str);
istream_iterator<string> start(strstr);
vector<string> results(start, istream_iterator<string>());
ostream_iterator<string> oit(cout, "\n");
copy(results.begin(), results.end(), oit);
}
但代碼段2不:
#include <string>
#include <vector>
#include <iostream>
#include <istream>
#include <ostream>
#include <iterator>
#include <sstream>
#include <algorithm>
using namespace std;
int main()
{
string str = "The quick brown fox";
stringstream strstr(str);
vector<string> results(istream_iterator<string>(strstr), istream_iterator<string>());
ostream_iterator<string> oit(cout, "\n");
copy(results.begin(), results.end(), oit);
}
唯一的區別是在該載體的構造函數的第一參數。
它是如何 「不工作」? – juanchopanza 2014-08-27 21:59:34
最令人頭疼的解析罷工了。 – Beed 2014-08-27 22:05:14
下面的答案在診斷中是正確的,但我只是建議一種替代解決方案,即IMO,這種解決方案更加易於理解。從矢量聲明你的迭代器在一個單獨的語句中。 'istream_iterator b(strstr),e;矢量結果(b,e);' –
2014-08-27 22:06:30