std::vector begin(),end()是内联函数么
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了std::vector begin(),end()是内联函数么相关的知识,希望对你有一定的参考价值。
是的!模板类的成员函数通通都是内联的。
有两种内联函数的声明方法,一种是在函数前使用inline关见字,另一种是在类的内部定义函数的代码,这样的函数将自动转换为内联函数,而且没必要将inline放在函数前面。 参考技术A std是命名空间
前面加#include <vector>
begin() 指向vector起始位置迭代器 end() 当前vector末尾元素的下一位置的迭代器
查看vector源文件可看到如下代码:
iterator begin()
// return iterator for beginning of mutable sequence
return (iterator(_Myfirst, this));
可见不是内联函数
将 std::vector 复制到 qvector
【中文标题】将 std::vector 复制到 qvector【英文标题】:copying a std::vector to a qvector 【发布时间】:2013-08-08 15:10:45 【问题描述】:我尝试使用以下方法将一个向量的内容复制到QVector
std::copy(source.begin(), source.end(), dest.begin());
但是目的地QVector
仍然是空的。
有什么建议吗?
【问题讨论】:
使用QVector::fromStdVector
【参考方案1】:
看看:
std::vector<T> QVector::toStdVector () const
QVector<T> QVector::fromStdVector ( const std::vector<T> & vector ) [static]
From docs
【讨论】:
试过了。作为MyQvector.fromStdVector(MyStedVector);
,qvector 仍然是空的
@Rajeshwar:因为它是静态方法,尝试:MyQvector = QVector::fromStdVector( MyStedVector );【参考方案2】:
'fromStdVector' 最近已明确标记为已弃用。 使用以下代码:
std::vector<...> stdVec;
// ...
QVector<...> qVec = QVector<...>(stdVec.begin(), stdVec.end());
【讨论】:
我真的不明白为什么 QT 团队已经弃用了这个功能。在我的脑海中似乎非常有用且更容易写...【参考方案3】:如果您要使用std::vector
的内容创建一个新的QVector
,您可以使用以下代码作为示例:
std::vector<T> stdVec;
QVector<T> qVec = QVector<T>::fromStdVector(stdVec);
【讨论】:
【参考方案4】:正如提到的其他答案,您应该使用以下方法将QVector
转换为std::vector
:
std::vector<T> QVector::toStdVector() const
以及将std::vector
转换为QVector
的以下静态方法:
QVector<T> QVector::fromStdVector(const std::vector<T> & vector)
这里是一个如何使用QVector::fromStdVector
的例子(取自here):
std::vector<double> stdvector;
stdvector.push_back(1.2);
stdvector.push_back(0.5);
stdvector.push_back(3.14);
QVector<double> vector = QVector<double>::fromStdVector(stdvector);
不要忘记在第二个QVector
之后指定类型(应该是QVector<double>::fromStdVector(stdvector)
,而不是QVector::fromStdVector(stdvector)
)。不这样做会给你一个恼人的编译器错误。
【讨论】:
以上是关于std::vector begin(),end()是内联函数么的主要内容,如果未能解决你的问题,请参考以下文章