0

如果我有这两个向量:

vec1: "hello", "world"
vec2: "it", "is", "sunny", "today"

resultvector: "helloit", "worldis"

我需要为此使用 stl 和一个仿函数。到目前为止,我抛出了一个 stackdump 错误:

我的仿函数:读入两个标准字符串,并将它们“+”在一起,返回操作结果。

我的功能:

创建一个std::list列表,并使用std::transform(vec1.begin(), vec1.end(), vec2.begin(), list.begin(), functor()); return list;

我的怀疑是我不知道如何让它只迭代到较小的容器结束,而且也许我正在用 list.begin() 做一些时髦的事情并且需要其他东西。

关于我如何做到这一点的任何想法?

注意:这两个向量是std::vector<string>,结果是std::list<string>

预先感谢您的帮助!

4

3 回答 3

1

在您的通话transform中,使用. 生成一个迭代器,将赋值转换为对底层容器的调用。back_inserter(list)list.begin()back_inserterpush_back

于 2013-07-26T20:51:29.910 回答
1
std::transform(
     vec1.begin(),
     vec1.begin()+std::min(vec1.size(),vec2.size()),
     vec2.begin(), 
     std::back_inserter(list), 
     functor()
); 
于 2013-07-26T20:54:50.707 回答
0
#include<iostream>
#include<algorithm>

using namespace std;

struct ff
{
 string operator ()(const string& x, const string& y ){
 return x+y; }
};

int main ()
{
 vector <string> vec1{"hello", "world"};
 vector <string> vec2{ "it", "is", "sunny", "today"};
 vector <string> resultvector;
 std::transform(
     vec1.begin(), vec1.begin()+min(vec1.size(),vec2.size()),
     vec2.begin(), 
     back_inserter(resultvector), 
     ff() 
     ); 

for(auto i:resultvector)
    cout<<i<<endl;
}
于 2013-07-26T21:05:45.893 回答