假设我们有一个普通数组(或其他支持基于范围的循环的容器):
const int N = 8;
int arr[N] = {0, 1, 2, 3, 4, 5, 6, 7};
Run Code Online (Sandbox Code Playgroud)
使用索引或迭代器,我们可以遍历奇数元素,将索引增加2:
for (int i = 0; i < N; i+=2)
{
std::cout << arr[i] << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
如何使用基于范围的循环获得类似的结果并避免显式迭代器/索引或迭代跳过使用?就像是:
for (const auto& v: odd_only(arr))
{
std::cout << v << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
您看到的简单而优雅的解决方案是什么?标准库是否包含类似的内容?
在C ++中,union可以包含静态成员,这些静态成员与类一样属于一个类,因此对于所有对象都是公共的。
union U
{
long l;
int i;
static long sl;
static int si;
};
int U::si;
long U::sl;
Run Code Online (Sandbox Code Playgroud)
逻辑上期望所有联合静态成员存储在与非静态成员存储类似的相同地址上。但事实并非如此。一个简单的示例显示静态成员存储在不同的地址下,并且可以包含独立的值。
int main()
{
U u;
u.si = 10;
u.sl = 50;
std::cout << "Non-static members adresses: " << &u.i << " " << &u.l << std::endl;
std::cout << "Static members adresses: " << &u.si << " " << &u.sl << std::endl;
std::cout << "Static members values: " << u.si << " " << u.sl << …Run Code Online (Sandbox Code Playgroud)