- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个 vector<bool>
我想把它归零。我需要尺寸保持不变。
通常的方法是遍历所有元素并重置它们。但是,vector<bool>
是 specially optimized容器,根据实现,每个元素可能只存储一位。有没有办法利用这一点来有效地清除整个事情?
bitset
,固定长度的变体,具有 set
功能。是否 vector<bool>
有类似的吗?
最佳答案
到目前为止发布的答案中似乎有很多猜测,但事实很少,所以也许值得做一些测试。
#include <vector>
#include <iostream>
#include <time.h>
int seed(std::vector<bool> &b) {
srand(1);
for (int i = 0; i < b.size(); i++)
b[i] = ((rand() & 1) != 0);
int count = 0;
for (int i = 0; i < b.size(); i++)
if (b[i])
++count;
return count;
}
int main() {
std::vector<bool> bools(1024 * 1024 * 32);
int count1= seed(bools);
clock_t start = clock();
bools.assign(bools.size(), false);
double using_assign = double(clock() - start) / CLOCKS_PER_SEC;
int count2 = seed(bools);
start = clock();
for (int i = 0; i < bools.size(); i++)
bools[i] = false;
double using_loop = double(clock() - start) / CLOCKS_PER_SEC;
int count3 = seed(bools);
start = clock();
size_t size = bools.size();
bools.clear();
bools.resize(size);
double using_clear = double(clock() - start) / CLOCKS_PER_SEC;
int count4 = seed(bools);
start = clock();
std::fill(bools.begin(), bools.end(), false);
double using_fill = double(clock() - start) / CLOCKS_PER_SEC;
std::cout << "Time using assign: " << using_assign << "\n";
std::cout << "Time using loop: " << using_loop << "\n";
std::cout << "Time using clear: " << using_clear << "\n";
std::cout << "Time using fill: " << using_fill << "\n";
std::cout << "Ignore: " << count1 << "\t" << count2 << "\t" << count3 << "\t" << count4 << "\n";
}
所以这会创建一个 vector ,在其中设置一些随机选择的位,对它们进行计数,然后清除它们(并重复)。设置/计数/打印是为了确保即使进行了积极的优化,编译器也不能/不会优化我们的代码来清除 vector 。
至少可以说,我发现结果很有趣。首先是 VC++ 的结果:
Time using assign: 0.141
Time using loop: 0.068
Time using clear: 0.141
Time using fill: 0.087
Ignore: 16777216 16777216 16777216 16777216
因此,对于 VC++,最快的方法是您最初可能认为最幼稚的方法——分配给每个单独项目的循环。使用 g++,结果只是 tad 不同:
Time using assign: 0.002
Time using loop: 0.08
Time using clear: 0.002
Time using fill: 0.001
Ignore: 16777216 16777216 16777216 16777216
在这里,循环是(到目前为止)最慢的方法(并且其他方法基本上是并列的——1 毫秒的速度差异实际上是不可重复的)。
不管怎样,尽管这部分测试显示为使用 g++ 快得多,但总体时间彼此相差不到 1%(VC++ 为 4.944 秒,VC++ 为 4.915 秒) g++)。
关于c++ - 如何将 vector <bool>归零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19562667/
我有一个使用 PHP 设置页面输入字段值的表单,例如: // create and fill inputVarsArr with keys that have empty vals $troubleI
大家好,我是码农先森。 古话说的 "三十而立",正是担重之时,却大部分人在职场中都处于不上不下的尴尬境地。已经没有刚毕业时那股子冲劲,被生活和工作磨平了棱角。 在技术思想方面,
我想将这个“.wrapper wf”类归零。 (比如 header 和 .p)但是我不能成功,你能帮我弄清楚吗? here is the fiddle .wf{ -webkit-transfo
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Set all bytes of int to (unsigned char)0, guaranteed t
当使用STL容器时,我不确定默认分配器分配的一个int是否已经归零。以下代码对问题表示"is": #include #include int main() { using namespace
我有一个包含弱引用的对象的以下简单代码: //界面 @interface GMWeakRefObj : NSObject @property (weak) id object; @end //执行 @
我是 React/redux 的新手。我有一个用于身份验证的 Redux 操作,之后我需要重定向到一个确认页面主页。我不知道如何重定向 这是我的 index.js import React, { Pr
我有一个 vector我想把它归零。我需要尺寸保持不变。 通常的方法是遍历所有元素并重置它们。但是,vector是 specially optimized容器,根据实现,每个元素可能只存储一位。有没有
我错误地将密码存储为 Java 程序中的字符串。我想防止此字符串密码出现在堆转储/内存转储中。理想情况下,我应该使用 char[] 并在使用后将其填充为零(如本文 - https://nvisium.
是否 x.resize(1024)保证valarray x会归零吗? 是否std::valarray z(1024);保证它也将被填充为零? 对于 Mac、Windows 和 Linux 是这样吗?即
下面的 java 代码是否足以清除内存中的 key (将其所有字节值设置为 0)? zerorize(SecretKey key) { byte[] rawKey = key.getEncod
我是 React 和 Redux 的初学者,我正在尝试设置一个非常简单的登录表单和重定向。我稍后会添加 react-router 或 react-router-redux。 我真的不明白我必须在哪里放
最近我一直在使用 cgo 在我的一个项目中设置 libsodium,以便使用 crypto_pwhash_str 和 crypto_pwhash_str_verify 函数. 这一切都进行得非常顺利,
我正在使用以下代码从网站检索一些数据。 Public Function giveMeValue(ByVal link As String) As String Set htm = CreateO
我想要获得与在 Photoshop 中关闭其中一个 channel 相同的结果。我正打算尝试循环改变颜色的每个像素。有更好的方法吗? 最佳答案 使用 Core Image 的颜色矩阵滤镜。 The a
我有以下用于导航的组件: import React, { Component } from "react"; import { connect } from 'react-redux'; import
试图在 Redux-React-API 丛林的黑暗深处找到方向 - 设法从 API 和 console.log 中获取数据 - 但我和我的 Google 技能都无法找出它不呈现的原因。 react 组
在我使用 redux 的 native react 应用程序中,reducers 似乎工作正常,但 UI 不会根据状态修改进行更新。 这是我的 reducer : const initialState
这tutorial Dan Abramov 提出,使用作用于全局状态(而不是一部分状态)的选择器的优势在于它们允许容器与状态结构的知识分离。 如果是这样的话,我们不应该也避免直接将状态值映射到 Pro
背景 我正在构建一个包装程序包,它组合了定义的命令并允许它们在 cli 或交互式 shell 上下文中执行。命令在类似这样的结构中定义(显示相关字段): type Handler func(c *Co
我是一名优秀的程序员,十分优秀!