如果您有一个扩展了的数组列表(数组已增长)以包含许多元素,然后又删除了这些元素,那么实际的数组大小是否会更改以节省内存?
更详细地,当从大数组列表中删除一个元素时,是否恢复了数组中数组空部分的保留内存?从逻辑上讲,由于我们扩展了数组,因此我们可能需要使用此空间,因此不会被触及。
但是,如果我们有一个非常大的数组列表,并且仅使用前10个左右的元素,那么编译器(或在运行时)是否会意识到所有多余的空间都在浪费并且可以恢复?(会减小实际的数组大小吗?(将元素复制到较小的数组中吗?))
我试图在python中处理一些相当大的数字,并遇到溢出错误。我决定进行更多调查,并遇到无法解释的不平等现象。当我评估10 ^ 26时,我得到:
>>> 10**26
100000000000000000000000000
Run Code Online (Sandbox Code Playgroud)
这是完全合乎逻辑的。但是,当我评估10e26并将其转换为int时,我得到:
>>>int(10e26)
1000000000000000013287555072
Run Code Online (Sandbox Code Playgroud)
为什么是这样?我不能正确理解e符号吗?(据我所知,10e26是10 * 10 ^ 26,如该答案所示:与变量一起使用的10e表示法?)
10 ^ 26超过了最大整数大小,所以我也想知道python中是否有任何机制可以允许以科学格式使用数字(不考虑所有那些零)以便能够计算超过数字的运算最大尺寸。
我想从向量中删除一个元素,但不能保证该元素存在。我在网上查看过,但没有发现有关擦除删除习语如何处理不在容器中的值的信息。
我的向量是这样声明的:(在代码的其他部分中添加/修改了成员)
std::vector<Person*> _members
Run Code Online (Sandbox Code Playgroud)
我想在包含 _members 作为属性的类 Group 中创建一个 remove 方法,以尝试从组中删除给定的人。
我目前正在使用:(要删除的人是指向 Person 对象的指针)
_members.erase(std::remove(_members.begin(), _members.end(), person_to_remove), _members.end());
Run Code Online (Sandbox Code Playgroud)
这将如何处理试图删除不在向量中的 Person ?理想情况下,我还想返回一个布尔值来确认删除是否成功,我当前的实现有没有办法这样做?