小编Pho*_*reo的帖子

为什么std :: deque子阵列大小是固定的?

背景

std::deque使用子数组来存储其元素.它有一个额外的簿记数据结构,以跟踪其子阵列.这样,与之相比std::vector,std::deque可以从后面更快地增长(O(1)与摊销的O(1)相比),并且在前面更快(O(1)与O(n)相比).这是因为std::deque可以在任一端添加子数组,只需要修改其簿记数据结构.


我不明白的是,为什么子阵列有自己的尺寸固定为解释在这里:

典型的实现使用一系列单独分配的固定大小的数组

没有固定大小的子阵列有很多优点.例如,由于子阵列的大小是固定的,因此中间的任何插入都必须是O(n)复杂度,其中n是到最近端的元素的数量.然而,如果子阵列可以自由生长,则在中间插入将是O(k),其中k是子阵列中元素的数量,其快得多,特别是如果std::deque具有许多子阵列.从中间删除也是一样的.

是因为std::deque想要保持其子阵列平衡吗?如果子阵列太大/太小,则可以通过启用子阵列进行拆分或合并来轻松减轻这种情况.复杂性将只是O(k),其中k是最大子阵列的大小.(或者最小的子阵列和它的较小邻居的组合大小)

是因为固定大小的子阵列使得随机迭代更快吗?例如,如果你想要第n个元素,你必须通过簿记数据结构并添加所有先前子阵列的大小,使得复杂度为O(k),其中k是簿记数据结构的大小.但这不是一个大问题,因为std::deque广告宣传是一个双向链表,无论如何都有更好的缓存.


编辑: std::deque只是链表实现和数组实现之间的中间人.我想我的问题已经失去了它的原始含义,只是暗示它应该表现得更像链接列表而不是矢量

c++ algorithm time-complexity deque c++11

3
推荐指数
1
解决办法
323
查看次数

使用浮动"可能有损转换"的问题

这是我为我的一个CS课程编写的代码,但我想我还没有正确理解浮动这个术语.它适用于前3次转换,然后它给出了品脱,夸脱和加仑(小数点开始时)的错误.我已经尝试将它们转换为分数,但程序最终会随后吐出0.产生的错误是不兼容的类型:可能从double到float的有损转换

我的代码如下:

import java.lang.*;
import java.util.*;

/* 
Description: This application will be used to convert a user given volume 
in cups to its equivalent number of teaspoons, tablespoons, ounces, pints
quarts, or gallons.

This program will allow us to view what a certain volume of cups would be in
tablespoons, teaspoons etc.

This program will need the number of cups from the user.
Then the program will output the neccessary teaspoons, tablespoons etc.

                    4 cups equals 4 * 48 = …
Run Code Online (Sandbox Code Playgroud)

java floating-point

2
推荐指数
1
解决办法
171
查看次数

如何在退出流程之前每秒在C中显示一个点?

我试图显示...(三个点),但每个点然后是第二个延迟,然后是第二个点,然后是第二个延迟,然后是第三个点.

我试过这个

for(int i = 0;i < 3;i++)
{
sleep(1);
printf(".");
sleep(1);
}
Run Code Online (Sandbox Code Playgroud)

但这只是等待了6秒然后将三个点打印在一起,但我不想要那样.有没有解决这个问题.我想要

.第二次延迟.第二次延迟.

但它会出现

...

c printf buffer sleep

1
推荐指数
1
解决办法
1401
查看次数

带有圆角和阴影的 iOS 按钮

我已经搜索并尝试了各种解决方案,但没有成功。我想要的是带有圆角和阴影的按钮背景。我可以让其中一个发生,但不能同时发生。任何帮助将非常受欢迎。

viewDepositButton_.layer.cornerRadius = 5.0;
CAGradientLayer *viewLayer = [CAGradientLayer layer];
[viewLayer setColors:aloColors];
[viewLayer setFrame:viewDepositButton_.bounds];
[viewDepositButton_.layer insertSublayer:viewLayer atIndex:0];
viewDepositButton_.clipsToBounds = YES;

viewDepositButton_.layer.shadowColor = [UIColor colorWithRed:0.46 green:0.46 blue:0.46 alpha:1.0].CGColor;
viewDepositButton_.layer.shadowOpacity = 0.8;
viewDepositButton_.layer.shadowRadius = 8;
viewDepositButton_.layer.shadowOffset = CGSizeMake(8.0f, 8.0f);
Run Code Online (Sandbox Code Playgroud)

objective-c ios

1
推荐指数
1
解决办法
3652
查看次数

标签 统计

algorithm ×1

buffer ×1

c ×1

c++ ×1

c++11 ×1

deque ×1

floating-point ×1

ios ×1

java ×1

objective-c ×1

printf ×1

sleep ×1

time-complexity ×1