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&lt;double&gt;::fromStdVector(stdvector),而不是QVector::fromStdVector(stdvector))。不这样做会给你一个恼人的编译器错误。

【讨论】:

以上是关于std::vector begin(),end()是内联函数么的主要内容,如果未能解决你的问题,请参考以下文章

超过向量不会导致段错误

基数排序的优雅实现

对 std::max_element 施加条件

为啥 std::vector 没有 append 方法? [关闭]

在 std::vector 中擦除、调试、发布

对空向量进行 std::sort [关闭]