我正在对一些STL算法进行基准测试,我对以下代码所花费的时间感到惊讶:(我用time命令测量了g ++编译代码[无优化] )
#include <vector>
struct vec2{
int x, y;
vec2():x(0), y(0) {}
};
int main(int argc, char* argv[]){
const int size = 200000000;
std::vector<vec2> tab(size); //2.26s
// vec2* tab = new vec2[size]; //1.29s
// tab[0].x = 0;
// delete[] tab;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
向量初始化所需的时间是2.26秒,而new(和delete)需要1.29秒.矢量ctor做什么需要更长的时间?new[]在每个元素上调用构造函数,就像vectorctor一样,对吧?
然后我用-O3编译,它运行得更快,但两个代码之间仍然存在差距.(我分别得到了0.83秒和0.75秒)
有任何想法吗?
从这个问题,我知道一个const string可以是const事物的连接.现在,一个枚举只是一组续整数,不是吗?那么为什么不能这样做:
const string blah = "blah " + MyEnum.Value1;
Run Code Online (Sandbox Code Playgroud)
或这个 :
const string bloh = "bloh " + (int)MyEnum.Value1;
Run Code Online (Sandbox Code Playgroud)
你如何在const字符串中包含枚举值?
现实生活中的例子:在构建SQL查询时,我想拥有"where status <> " + StatusEnum.Discarded.
给定一个文件的路径,我想创建这个文件,如果它们不存在,则创建通向它的目录字符串; 但我不希望我的程序的任何其他实例能够在没有文件的情况下看到基本目录.
基本上,我想立即原子地创建所需的目录和文件.根据我的理解,它必须分两步完成(创建目录,创建文件),所以我考虑使用锁文件,但同样的问题适用:我在哪里创建锁文件?我不知道需要创建多少级别的文件夹,并且在某些方面,我可能会放弃写入权限,因此锁定文件没有"安全的地方".
然后我想到使用锁目录而不是锁文件,但我找不到任何"测试和设置"方法来创建目录(Directory.CreateDirectory(path)不告诉你它是否做了什么).
那么正确的方法是什么?
我正在编写一个Vec3类,为了优化目的,我没有构造函数.我还希望能够以x,y,z OR为r,g,b OR作为选项卡访问其成员.很容易,你可能会想:使用工会
template <typename T> struct Vec3_t
{
union
{
T val[3];
struct { T x, y, z; };
struct { T r, g, b; };
};
};
Run Code Online (Sandbox Code Playgroud)
然后,由于我没有ctor,我想像这样初始化它:
Vec3_t<int> v = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)
但我已经把双括号因为我在结构中初始化一个结构(像这样的:Vec3_t<int> v = {{1, 2, 3}})
所以,我的问题是:我怎么能这样做,以便我可以使用不同的名称进行访问,并使用一对大括号进行初始化?
我的尝试:为每个组件设置一个联合,但随后以访问作为表退出(一个人总是可以调用&v.x并将其视为一个浮点数[3],但那有点脏...而且不太安全我猜测)