一种分配和初始化数组的方法,比普通的循环和设置更快
Some way for allocating and initializing array faster than plain loop-and-set
这是我在c++中分配和初始化数组的方式。
char *dataPtr;
dataPtr= new char [40000];
int i;
for(i=0;i<40000;i++)
{
dataPtr[i]=200;
}
是否有其他更快、更干净的方法来实现这一点,因为for循环占用了我的应用程序相当多的时间?
使用std::vector
:
std::vector<char> data(40000, 200);
您可以使用memset()
,它有一个优化的汇编核心,在运行时适当地使用SSE/SSE2/等指令。memset()
函数的设计正是为了完成以下任务:尽可能快地将char
数组中的每个char
设置为特定值。
#include <cstring>
char *dataPtr = new char[LENGTH];
std::memset(dataPtr, 200, LENGTH);
然而,现代编译器会为你做这件事,你可以检查程序集,你可能会在原始代码中发现对memset()
的调用或使用for
循环的类似内容。无论如何,它只有40 kB,所以您不会节省太多时间,除非您必须经常初始化数组。
通过200
初始化每个数组元素,可以使用
std::fill_n(dataPtr, 40000, 200);
相关文章:
- 具有Qt事件循环的可移植通用共享库设置
- 对于完成布尔值设置为 true 后未停止的循环
- 循环中的变量被设置为下一个数组的元素始终具有相同的内存地址?
- 是否可以为一个循环设置多个条件
- 循环 std::由索引设置
- 第二个 while 循环未运行,将值设置为 "nan"
- C++ if 语句将条件设置为 true 和循环中的 OR-ing 条件之间的行为差异
- while 循环是否在设置标志的情况下运行多次?
- 有没有办法在C++中将偏移量设置为基于范围的 for 循环?
- 循环以使用设置模板类将所有 26 个字母添加到 s 中
- 尝试在自定义 QT 创建器文本编辑器中创建查找和替换循环.我似乎无法设置光标位置
- 在循环中设置指向 int 值的指针
- 如何将布尔矩阵的每个元素设置为false而不循环
- 如何使用Boost Graph库使用循环中的循环设置相同的边缘重量
- 一个线程设置成员,而另一个循环上方 - 是此螺纹 - 不安全
- 如何在没有循环的字节中设置位
- 对于循环设置变量为条件
- C++ 如何在地图中循环设置
- C++ std::map<std::string, std::set<std::string>> .如何循环设置值?
- Arduino循环/设置问题