【发布时间】:2011-09-14 11:41:24
【问题描述】:
我使用这样的代码:
const vector<filterStat> someArray={
{"Ana",1},
{"Bob",2},
{"Charlie",5},
};
static const int knElements=filterStats.size();
忽略 kn 前缀,这是我所说的常量,大小。 我发现它很有用,因为当我更改向量的初始化时,我不必更改或计算 knElements。但问题是使用 const 向量让我很困扰,因为向量是可调整大小的数组,所以感觉不对。顺便说一句,如果你想知道我为什么需要它——长篇大论,它是一种地图,但我不做任何搜索或插入,只是“为每个”做,所以数组是最好的选择。
编辑: 我把我的鳕鱼改成了这个,它编译:
const filterStat filterStats[]={
//...
};
static const int knFilterStats=sizeof(filterStats)/sizeof(filterStats[0]);
static_assert(sizeof(filterStats),"Can't run statistics-no filterStats exists");
我不知道你可以在 C++ 中做 []。对不起,愚蠢的问题,我希望它可以帮助别人。
【问题讨论】:
-
原始代码更好,恕我直言。
-
我知道并且我同意,但问题是它是一个相对经常被称为想要的高性能应用程序的一部分,所以我更喜欢这样使用它。顺便说一句,当我考虑基于范围的 for 循环时,knFilterStats 是不必要的。 :) 我只是不知道它是否和普通的速度一样。
-
您的新代码的问题是您将不得不将数组的大小与数组一起传递。您不必使用矢量来执行此操作。
-
@Neil:旧代码的特定目的是使用
vector传递大小。也许这是不必要的,但考虑到为filterStats.size创建单独变量的决定,该数组似乎是合理的。 -
如果您发现自己花时间考虑这样的决定,最好只是尝试两种方法并在对照实验中进行测量。通常数组索引样式被优化为指针递增样式,而不是相反,尽管它可以依赖。