C++无法返回矢量模板
C++ unable to return a vector template
我正试图编写一个函数,将泛型列表转换为向量,但我无法编译我的函数。这是我的代码(位于.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()};
}
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何获取std::result_of函数的返回类型
- QueryWorkingSet总是返回false
- (C++)分析树以计算返回错误值的简单算术表达式
- 访问者访问变体并返回不同类型时出错
- 如何返回一个类的两个对象相加的结果
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- lower_bound()返回最后一个元素
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如何取消对nullptr的屏蔽,返回正确的对象
- 奇怪的结构&GCC&clang(void*返回类型)
- 架构决策:返回std::future还是提供回调
- 从python中调用C++函数并获取返回值
- 矩阵向量乘法(cublasDgemv)返回零
- 为什么模板类中的对象不能返回值