【发布时间】:2022-01-01 06:59:17
【问题描述】:
我想在 c++ 中访问元组 (https://en.cppreference.com/w/cpp/utility/tuple/get) 的位置 i 处的元素。\ 例如,如果我有:\
std::tuple <int, int, int> t{1, 2, 3};
int x = std::get<2>(t);
访问一个元素的时间是恒定的还是线性的?
【问题讨论】:
-
时间恒定。
-
一切都在编译期间完成。如果您在某处访问其他 int 时寻址元组中的第 n 个 int,它应该是相同的。
-
@Klaus 不是真的,这里还有一些(不多,诚然,但仍然)运行时工作。它更类似于访问结构的任意成员,而不是“某处的其他
int”。 -
由于
tuple的大小是恒定的,即使需要对tuple进行“线性”遍历,它仍然可以作为常量。它是不需要的;编译器将改为在编译时预先计算元素的偏移量。但无论如何,它始终是常数,因为即使是 3 × constant == constant。 -
n² 在编译时仍然是任何 n 的常数。但是当然,理解,你想知道,例如具有 10000 个元素的元组需要大约 10000 步才能获得最后一个元素。答案是 no,访问第 0 个和第 9999 个元素需要大致相同(小)的恒定步数,并且在编译时预先计算偏移量。但它确实需要编译器在编译时执行这 10000 步,这是肯定的。