C ++无法返回矢量模板

时间:2012-04-02 07:21:53

标签: c++ list templates vector

我正在尝试编写一个将通用列表转换为向量的函数,但是,我无法编译我的函数。这是我的代码(位于.h文件中):

template <class T>
inline std::vector<T> list2vector(std::list<T> &l)
{
  std::vector<T> v;
  v.insert(v.begin(),l.begin(),l.end());
  return v;
}

有谁可以指出我在这里缺少的东西? 编译器错误如下:

find_rpeat.cpp:85: error: invalid initialization of non-const reference of type
?std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&?
from a temporary of type
?std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >?

4 个答案:

答案 0 :(得分:3)

std::vector<T> v;
std::copy(l.begin(),l.end(), std::back_inserter(v));

答案 1 :(得分:1)

根据您的评论,您的代码就是这样的,它应该编译:

#include <iostream>
#include <vector>
#include <list>
using namespace std;

template <class T>
inline std::vector<T> list2vector(std::list<T> &l)
{
  std::vector<T> v;
  v.insert(v.begin(),l.begin(),l.end());
  return v;
}

int main() {
   list<string> mylist;
   vector<string> myvector = list2vector(mylist); 
   return 0;
}

但是为了产生你的错误信息,应该有:vector<string>& myvector = list2vector(mylist);(将临时对象分配给非const引用)

答案 2 :(得分:0)

STL中已经存在通用转换功能。试试

std::transform(l.begin(), l.end(), std::back_inserter(v), Fn);

如果您可以使用STL执行此操作,我认为没有理由编写list2vector或其他内容。想想它就像两个“通用”集之间的映射。在你的情况下列表和向量之间。

答案 3 :(得分:0)

我似乎可以在一行中创建和填充矢量

std::vector<T> v (l.begin(), l.end());

在C ++ 11中,它可以做得更短

template <class T>
inline std::vector<T> list2vector(std::list<T> &l)
{
  return {l.begin(), l.end()};
}