2013-07-26 37 views
0

两个大小不均加入载体词放在一起的功能。如果我有这两个向量:试图创建将字符串

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

resultvector: "helloit", "worldis" 

我需要使用STL这一点,和函子。到目前为止,我抛出了一个stackdump错误:

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

我的功能:

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

我怀疑的是,我不知道如何使它只重复直到小容器的结束,也可能是我用list.begin()做一些奇怪的事情,并且需要别的东西。

关于如何完成此任务的任何想法?

注:两个向量std::vector<string>和结果是std::list<string>

预先感谢您的帮助!

+1

发布您的代码! – Kevin

+0

谢谢列昂尼德·沃尔尼茨基,它修复了一切 – user2624236

+0

缺乏最基本的理解。 – lpapp

回答

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; 
} 
1

在你的transform调用中,使用back_inserter(list)代替list.begin()back_inserter产生一个迭代器,将分配转换为底层容器上的push_back调用。

1
std::transform(
    vec1.begin(), 
    vec1.begin()+std::min(vec1.size(),vec2.size()), 
    vec2.begin(), 
    std::back_inserter(list), 
    functor() 
); 
+0

谢谢,它现在可行! – user2624236

+0

不客气。顺便说一句,使用STD(列表)使用的名称,不建议。 –