C++无法返回矢量模板

C++ unable to return a vector template

本文关键字:返回 C++      更新时间:2023-10-16

我正试图编写一个函数,将泛型列表转换为向量,但我无法编译我的函数。这是我的代码(位于.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> > > >?
std::vector<T> v;
std::copy(l.begin(),l.end(), std::back_inserter(v));

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

#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);(将临时对象分配给非常量引用)

STL中已经有了通用的转换函数。尝试

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

我不认为有任何理由写list2vector或其他什么,如果你可以使用STL。把它想象成两个"通用"集合之间的映射。在您的情况下,介于列表和向量之间。

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

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()};
}