|
|
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必须声明一个移动赋值运算符。 |
|
|
Julia · 矢量中相加为总和S的值的数量 3 年前 |
|
|
C_Rod · 在模板方法中确定STL容器中项目的数据类型 3 年前 |
|
|
quantumwell · 将空向量放入std::map() 8 年前 |
|
|
OutOfBound · 对未初始化内存使用算法的优点 8 年前 |
|
|
DarthRubik · 在使用列表删除之后,迭代器如何不无效 8 年前 |