假设我们有一些整数变量,并且它们都应该从名为" numberpool"的结构中获取它们的值。通过函数调用,值赋值只能由" entrykey":
完成SET 0 = 0 + 1
我想知道,这是完成这项工作的最快方法吗?由于频繁的函数调用,我怀疑有更有效的方法可以做到这一点 如果我定义另一个包含所有int变量的结构,并且只调用一次函数,它会有用吗?
答案 0 :(得分:2)
函数调用的性能不是你的问题。编译器将能够很好地优化它。
然而,看到这么多变数让我感到畏缩。除非你真的在每一个变量背后都有一个含义(除了是字母表的字母),你应该考虑另一个设计。如果你真的想将字母表映射到数字,你应该只使用一个数组。
答案 1 :(得分:2)
使用方法代替独立功能并指定自然方式:
struct numberpool{
vector<int> numbers(100);
int get( size_t tag ) const { return numbers[tag] };
};
int main(){
numberpool pool;
...... // pool initialization
int a = pool.get(1);
int b = pool.get(5);
....and so on.
return 0;
}
答案 2 :(得分:0)
如果大多数“标签”索引紧密组合在一起,您可以将基础数据复制为一个块:
struct subrange{
static size_t min_ndx() constexpr { return 1; }
static size_t max_ndx() constexpr { return 23; }
static size_t storage_size() constexpr { return max_ndx() - min_ndx() + 1; }
array<int, storage_size()> storage;
int outlier_99; // Avoid copying indices between 24 and 99
// accessors
int &a() { return storage[1 - min_ndx()]; }
int &b() { return storage[5 - min_ndx()]; }
int &c() { return storage[23 - min_ndx()]; }
int &d() { return outlier_99; }
// Constructor allows numberpool to copy its vector
subrange(const vector<int>& numbers)
:storage(numbers.cbegin() + min_ndx(),
numbers.cbegin() + min_ndx() + storage_size()),
outlier_99(numbers[99])
{}
};
struct numberpool{
vector<int> numbers(100);
subrange copy_subrange( ) const {
return subrange(numbers); };
};
main()
{
numberpool pool;
...... // pool initialization
// Copy a subset of memory, including data you're interested in,
// and some chunks in between you're not.
auto extracted = pool.copy_subrange();
int sum = extracted.a() + extracted.b() + extracted.c() + extracted.d();
根据您的具体情况,复制一块内存可能会更快,也可能不会更快。如果有疑问,请尝试两种方式。