- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
给定一个 std::vector
,其大小和容量可以是任意的,将其大小更改为 0 并将容量更改为至少 N(给定数字)的最佳做法是什么?
我的直接想法是:
void f(vector<int> &t, int N)
{
t.clear();
t.reserve(N);
}
但是我注意到了
A reallocation is not guaranteed to happen, and the vector capacity is not guaranteed to change(when std::vector::clear is called).
所以我想知道当原始容量大于给定的 N 时如何避免重新分配?
最佳答案
what's the best practice to change its size to 0 and capacity to N(a given number)? My direct idea is: ...
你的直接想法是正确的,也是最简单的选择。尽管有点迂腐,reserve
将容量更改为大于或等于给定的数字;不保证相等(但我测试过的所有实现确实会在以前的容量较小的情况下准确分配给定的数量)。
So I'm wondering how to avoid reallocating when the origin capacity is larger than the given N?
通过使用已选择在调用 clear
时不释放内存的标准库实现(即任何符合标准的实现,如答案 here 所示)。
保证的另一种方法(尽管 cplusplus.com 上的措辞薄弱,但似乎这不是必需的,因为应该保证上述内容)不重新分配(在 N > t.capacity()< 的情况下
): 因为 vector 包含简单的整数,而且你似乎知道会有多少元素(正如你知道的那样保留),你可以简单地调用 t.resize(N)
(到在不清除 vector 的情况下删除额外的元素(以防尺寸更大),然后继续覆盖现有元素,而不是推送新元素。
当然,这意味着您将无法观察到被覆盖的元素数量,因此这种方法并不适用于所有用例。如果您只是想用一个简单的循环填充 vector ,那很好。
如果新大小可能大于旧大小,您可能希望在调整大小之前保留,并且您不想过度分配。这是因为大多数实现都分配了精确的保留量(正如我提到的),但在调整大小时使用了乘法策略(据我所知,这些行为都没有得到保证,但我使用的实现与此行为一致)。
关于c++ - 制作 std::vector capacity>=N 和 size=0 的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51186842/
我正在查看 vector 在 https://www.cs.odu.edu/~zeil/cs361/sum18/Public/vectorImpl/index.html 上的实现. 在1.3.1下,显
我在这两篇论文中发现了“high-capacity cnn”这个短语: 1. Rich feature hierarchies for accurate object detection and se
我在根队列下有 4 个队列,配置如下。 |-------------|-----------------|---------------------|-------------------| | Qu
我正在阅读 Scala,我想知道...... 为什么 val capacity : Int 代替 val Int capacity. 做出这个选择的任何原因。如果不是,在我看来,放弃 Java 的声明
我不明白为什么数据是导致我出现问题的唯一私有(private)变量。本来我以为我可以通过在构造函数中第一次声明变量来解决问题,但我觉得必须有一种方法可以私下定义变量,然后在构造函数中设置它们而不会出现
股票初始值为 1 流量为0.1 Stock1 初始值为 0。 当我运行模拟时,我意识到股票的值(value)低于 0(获得负值)。当 Stock 的值达到零时如何停止流动。 最佳答案 一个应该有一个非
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: Size-limited queue that holds last N elements in Java Java
我可以使用容量来查找 ShortBuffer 的实际大小或长度吗?根据我的阅读,它返回缓冲区中包含的元素数。但是“能力”这个词就是这么含糊。如果我在这个缓冲区中放入一个包含 5 个短裤的数组,capa
我是 C++ 的新手,我目前正在处理这个类(class)表项目,以下是我的 add_course 函数。我在 map 中存储学生的 ID、学期和类(class)列表。它有效(我可以向学生添加类(cla
我理解deque和vector都预留了一定的增长空间。 vector::capacity() 能够获取一个 vector 的内部保留空间。 Deque 在标准中没有这样的成员。有什么方法可以获取这些信
当使用只有一个队列(默认)的 Hadoop 容量调度程序时,hadoop 如何调度该作业中的不同作业?是先进先出吗?它有不同的机制吗? 使用公平调度程序时,这种行为有什么不同吗? 最佳答案 来自 cl
List 上有几个属性这似乎与列表中的项目数量有关 - Capacity , Count (作为属性和方法存在)。这非常令人困惑,尤其是与 Array 相比那只有 Length . 我正在使用 Lis
package main import "fmt" import "time" func main() { message := make(chan string ,1) // no buf
我只打开简单的项目并收到错误 "Gradle sync failed: Illegal Capacity: -182931123" 最佳答案 似乎删除/home//.gradle/daemon/4.1
我遇到了一个非常令人困惑的崩溃,我目前正在用尽我的智慧...... 首先是崩溃日志: 日期/时间:2012-02-14 10:55:09.771 +0100 操作系统版本:Mac OS X 10.7.
作为用户,我有 std::string 的 size()/resize()/reserve() 来了解和管理所有这些字符串的内存。 但是,我什么时候必须使用 capacity()?是否有任何用例或必要
当我创建一个向量时,长度和容量是相同的。这些方法有什么区别? fn main() { let vec = vec![1, 2, 3, 4, 5]; println!("Length:
void enqueue( int item) { if (is Full(this)) return; this.rear = (this.rear + 1)%thi
我想知道如何使用DP解决这样的问题。 给定 n 个球和 m 个箱子,每个箱子有最大值。容量 c1, c2,...cm。将这 n 个球分配到这 m 个箱子中的方法总数是多少。 我面临的问题是 如何找到递
HTTP 状态代码 503 是 described in rfc2616当服务器“由于服务器的临时过载或维护而当前无法处理请求”时是相关的。 在某些情况下,应用程序可能会因维护而停机。在某些情况下,应
我是一名优秀的程序员,十分优秀!