使用迭代器连接向量中的元素

时间:2014-03-02 07:09:40

标签: c++ vector iterator

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”?

任何帮助提示或帮助将不胜感激

5 个答案:

答案 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

Live Example

答案 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 + operatoriterator

连接如下
std::string myCompleteString;
vector<std::string>::iterator it;
for(it=myVec.begin(); it!=myVec.end(); ++it)
        myCompleteString  += *it +  " ";

cout << myCompleteString;