template
<
class ForwardIterator
,
class T
,
class Compare
>
QPair
<
ForwardIterator
,
ForwardIterator
>
quickFind
(
ForwardIterator first
,
ForwardIterator last
,
const
T
&
val
,
Compare comp
)
ForwardIterator it
=
qLowerBound
(
first
,
last
,
val
,
comp
)
;
return
qMakePair
(
it
,
qUpperBound
(
it
,
last
,
val
,
comp
)
)
;
int
main
(
int
argc
,
char
*
argv
[
]
)
int
ttt
=
100000
;
QTime t
;
t
.
start
(
)
;
QList
<
int
>
list
;
for
(
int
i
=
0
;
i
<
ttt
;
i
++
)
list
.
append
(
i
)
;
qDebug
(
)
<<
"list:"
<<
t
.
restart
(
)
;
for
(
int
i
=
0
;
i
<
ttt
;
i
++
)
QPair
<
QList
<
int
>
::
iterator
,
QList
<
int
>
::
iterator
>
j
=
quickFind
(
list
.
begin
(
)
,
list
.
end
(
)
,
list
.
at
(
i
)
,
ascendingOrder
(
)
)
;
quint64 pos
=
j
.
first
-
list
.
begin
(
)
;
list
.
insert
(
pos
,
i
)
;
qDebug
(
)
<<
"list插入:"
<<
t
.
restart
(
)
;
for
(
int
i
=
0
;
i
<
ttt
;
i
++
)
QPair
<
QList
<
int
>
::
iterator
,
QList
<
int
>
::
iterator
>
j
=
quickFind
(
list
.
begin
(
)
,
list
.
end
(
)
,
list
.
at
(
i
)
,
ascendingOrder
(
)
)
;
quint64 pos
=
j
.
first
-
list
.
begin
(
)
;
list
.
removeAt
(
pos
)
;
qDebug
(
)
<<
"list刪除:"
<<
t
.
restart
(
)
;
QVector
<
int
>
vector
;
for
(
int
i
=
0
;
i
<
ttt
;
i
++
)
vector
.
append
(
i
)
;
qDebug
(
)
<<
"vector:"
<<
t
.
restart
(
)
;
for
(
int
i
=
0
;
i
<
ttt
;
i
++
)
QPair
<
QVector
<
int
>
::
iterator
,
QVector
<
int
>
::
iterator
>
j
=
quickFind
(
vector
.
begin
(
)
,
vector
.
end
(
)
,
vector
.
at
(
i
)
,
ascendingOrder
(
)
)
;
quint64 pos
=
j
.
first
-
vector
.
begin
(
)
;
vector
.
insert
(
pos
,
i
)
;
qDebug
(
)
<<
"vector插入:"
<<
t
.
restart
(
)
;
for
(
int
i
=
0
;
i
<
ttt
;
i
++
)
QPair
<
QVector
<
int
>
::
iterator
,
QVector
<
int
>
::
iterator
>
j
=
quickFind
(
vector
.
begin
(
)
,
vector
.
end
(
)
,
vector
.
at
(
i
)
,
ascendingOrder
(
)
)
;
quint64 pos
=
j
.
first
-
vector
.
begin
(
)
;
vector
.
removeAt
(
pos
)
;
qDebug
(
)
<<
"vector刪除:"
<<
t
.
restart
(
)
;
list
.
clear
(
)
;
for
(
int
i
=
0
;
i
<
ttt
;
i
++
)
list
.
append
(
i
)
;
qDebug
(
)
<<
"list:"
<<
t
.
restart
(
)
;
for
(
int
i
=
0
;
i
<
ttt
;
i
++
)
QPair
<
QList
<
int
>
::
iterator
,
QList
<
int
>
::
iterator
>
j
=
quickFind
(
list
.
begin
(
)
,
list
.
end
(
)
,
list
.
at
(
i
)
,
ascendingOrder
(
)
)
;
list
.
insert
(
j
.
second
,
i
)
;
qDebug
(
)
<<
"list迭代器插入:"
<<
t
.
restart
(
)
;
for
(
int
i
=
0
;
i
<
ttt
;
i
++
)
QPair
<
QList
<
int
>
::
iterator
,
QList
<
int
>
::
iterator
>
j
=
quickFind
(
list
.
begin
(
)
,
list
.
end
(
)
,
list
.
at
(
i
)
,
ascendingOrder
(
)
)
;
list
.
erase
(
j
.
first
)
;
qDebug
(
)
<<
"list迭代器刪除:"
<<
t
.
restart
(
)
;
vector
.
clear
(
)
;
for
(
int
i
=
0
;
i
<
ttt
;
i
++
)
vector
.
append
(
i
)
;
qDebug
(
)
<<
"vector:"
<<
t
.
restart
(
)
;
for
(
int
i
=
0
;
i
<
ttt
;
i
++
)
QPair
<
QVector
<
int
>
::
iterator
,
QVector
<
int
>
::
iterator
>
j
=
quickFind
(
vector
.
begin
(
)
,
vector
.
end
(
)
,
vector
.
at
(
i
)
,
ascendingOrder
(
)
)
;
vector
.
insert
(
j
.
second
,
i
)
;
qDebug
(
)
<<
"vector迭代器插入:"
<<
t
.
restart
(
)
;
for
(
int
i
=
0
;
i
<
ttt
;
i
++
)
QPair
<
QVector
<
int
>
::
iterator
,
QVector
<
int
>
::
iterator
>
j
=
quickFind
(
vector
.
begin
(
)
,
vector
.
end
(
)
,
vector
.
at
(
i
)
,
ascendingOrder
(
)
)
;
vector
.
erase
(
j
.
first
)
;
qDebug
(
)
<<
"vector迭代器刪除:"
<<
t
.
restart
(
)
;
前言测试QList和QVector的数据插入和删除的速度。代码如下(示例)://以函数对象的形式定义查找规则--升序--MftNumberclass ascendingOrder {public: bool operator()(const int& i, const int& j) { return i < j; }};//快速查找template<class ForwardIterator, class T, class C
1、直接下载的版本编译会出错,网上多下面解决办法:xlsxzipreader.cpp文件,定位到51行,把
QList
改成
QVector
如:
QVector
allFiles = m_reader->fileInfoList();
2、但是github上的解决办法是下载了另外一个版本的(https://codeload.github.com/VSRonin/QtXlsxWriter/zip/master)这个版本亲测编译木问题
3、用qt编译时先make 在构建
来自Qt官方文档和Effective Qt
QList
<T>、QLinkedList<T>和
QVector
<T>提供了类似的API和功能。它们通常是可互换的,但会对性能产生影响。
QVector
应该是默认的第一选择。
QVector
<T>通常比
QList
<T>提供更好的性能,因为
QVector
<T>总是在内存中顺序存储其项,
其中
QList
<T>在堆上分配其项,除非sizeof(T) <
一、【
QVector
】解析
QVector
可能是Qt中最接近STL的容器。尽管如此,它在许多平台上的性能还是比std::vector差,这是因为它的内部结构更复杂。通过
比较
GCC 4.3.2 (x86-64) -O2编译环境下,在
QVector
(Qt 4.6.3)以及std::vector上的迭代操作部分生成的代码:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dtFg8gfr-1647524128041)(C:\Users\d\AppData\Roaming\markt
QLinkedList 是提供链表的一个模板类。
2.
QVector
<T> 是QT的一个通用容器类,它在相邻的内存位置中存储items的值,并且提供基于索引(index-based)的快速访问。
QList
<T>...
std中有几个常用的容器:vector、List、set、map,Qt中也封装了类似的容器。Qt 的容器类提供了隐式数据共享、不可变的特性,并且为
速度
做了优化,具有较低的内存占用量等。另外一点
比较
重要的,它们是线程安全的,且这些容器类是平台无关的 。
二、
QVector
1、添加元素
QVector
<int> intVec;
intVec.append(10);......