如何从std :: vector创建QList

Tom*_*ica 4 c++ arrays containers stdvector qlist

QList::fromStdList允许您创建QListstd::list.但如何建立QListstd::vector

当然,除了手动循环:

QList<T> myList;
myList.reserve(vector.size());
for(size_t i = 0, l = vector.size(); i < l; ++i)
    myList << vector[i];
Run Code Online (Sandbox Code Playgroud)

Chr*_*n G 13

可以从std向量创建QVector,因此如果要避免循环,可以执行此操作:

QList<T> myList = QList<T>::fromVector(QVector<T>::fromStdVector(vector));
Run Code Online (Sandbox Code Playgroud)

当然,这会在此过程中创建不必要的副本.您也可以使用std :: copy和back_inserter,而不必编写循环

QList<T> myList;
myList.reserve(vector.size());
std::copy(vector.begin(), vector.end(), std::back_inserter(myList));
Run Code Online (Sandbox Code Playgroud)

  • 有趣的是,`QList::reserve` 接受一个 `int`,而 `std::vector.size` 返回一个无符号整数类型。根据您的编译器设置,您可能会收到“从 'size_t' 到 'int' 的转换,可能会丢失数据”警告/错误。 (3认同)