string s1 = "bob";
string s2 = "hey";
string s3 = "joe";
string s4 = "doe";
vector<string> myVec;
myVec.push_back(s1);
myVec.push_back(s2);
myVec.push_back(s3);
myVec.push_back(s4);
如何在myVec上使用迭代器输出“bob hey”“bob hey joe”“bob hey joe doe”?
任何帮助提示或帮助将不胜感激
答案 0 :(得分:4)
以下内容应该有效:
for (auto it = myVec.begin(), end = myVec.end(); it != end; ++it)
{
for (auto it2 = myVec.begin(); it2 != (it + 1); ++it2)
{
std::cout << *it2 << " ";
}
std::cout << "\n";
}
示例输出:
bob
bob hey
bob hey joe
bob hey joe doe
答案 1 :(得分:2)
using namespace std;
auto it_first = begin(myVec);
auto it_last = begin(myVec) + 2;
while (it_last != end(myVec))
for_each(it_first, it_last++, [](string const & str) { cout << str << " "; });
cout << endl;
}
这应该这样做。编辑:纠正错误:)应该给你正确的输出请确认。接下来还有一个额外的。
答案 2 :(得分:2)
如果您可以使用boost
:
std::vector<std::string> s { "bob", "hey", "joe", "doe" };
std::vector<std::string> d;
for (auto i = std::begin(s); i != std::end(s); ++i) {
d.push_back(boost::algorithm::join(
boost::make_iterator_range(std::begin(s), i + 1),
std::string(" ")
));
}
输出向量d
将包含以下内容:
bob
bob hey
bob hey joe
bob hey joe doe
但更有效的解决方案是使用临时字符串:
std::vector<std::string> s { "bob", "hey", "joe", "doe" };
std::vector<std::string> d;
std::string t;
std::for_each(std::begin(s), std::end(s), [&](const std::string &i) {
d.push_back(t += (i + " "));
});
答案 3 :(得分:1)
你可以使用与cout完全相同的方式使用stringstream。它们不是打印到屏幕上,而是保存在字符串中。可以使用.str()。
访问该字符串请参阅:How to use C++ String Streams to append int?
您的代码看起来像这样:
vector <int> myVec;
std::stringstream ss;
for(int i=0; i<10; i++)
myVec.push_back(i); //vector holding 0-9
vector<int>::iterator it;
for(it=myVec.begin(); it!=myVec.end(); ++it) {
ss<<*it<<endl;
cout << ss.str() << " "; // prints 1 12 123 1234 ...
}
// ss.str() == "123456789";
答案 4 :(得分:1)
您可以尝试使用std::string
+ operator
和iterator
std::string myCompleteString;
vector<std::string>::iterator it;
for(it=myVec.begin(); it!=myVec.end(); ++it)
myCompleteString += *it + " ";
cout << myCompleteString;