![]() |
1
129
使用C++11,它非常简单:
现在
至于C++03,正如普托里状态一样,你可以交换向量。有一个专门的
|
![]() |
2
20
如果你有一个C++11编译器,你可以移动
如果您使用的是较旧的编译器,只需
在这两种情况下
O(N)
操作将清除
|
![]() |
3
6
std:移动效果很好。以下是相同的示例代码
|
![]() |
4
5
这可以通过以下组合来完成
|
|
5
4
只需在向量上调用clear就需要o(1)时间,因为clear什么都不做, 如果您真的想在将B分配给A后清除它,您可以执行以下操作
|
|
6
2
交换功能可以做到这一点。
输出
|
![]() |
7
2
如果不能std::move或std::swap向量(例如,因为A和B是相关的,但类型不同,可能只相差const),则可以执行以下操作:
请注意,这使A具有相同数量的元素,但它们都处于不确定状态(即,它们可以被分配或销毁,但不能被读取)。 |
![]() |
8
2
我没有代表发表评论,但我想根据以下内容提及: https://en.cppreference.com/w/cpp/container/vector/operator%3D 无效。指针是对的。特别是。。。
因此,按照标准,总督的回答是错误的。然而,至少对MSVC来说,这已经足够好了,因为该实现无论如何都会清除列表(对大多数人来说可能是真的)。 有趣的是,由于我们声明了一个移动构造函数,因此不会声明任何隐式的移动赋值运算符。因此,我们“知道”std::vector必须声明一个移动赋值运算符。 |
![]() |
kaytu · push_back()后向量大小发生变化 2 年前 |
![]() |
Megasa3 · 使用随机值初始化二维向量 7 年前 |
![]() |
enanone · 求反std::矢量的最快方法 7 年前 |
![]() |
Victor O. · 如何将向量列表存储为全局变量? 7 年前 |
![]() |
PaperMoon · 具有结构mmapped向量的结构 7 年前 |