我正在尝试编写一个将通用列表转换为向量的函数,但是,我无法编译我的函数。这是我的代码(位于.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> > > >?
答案 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()};
}