小编Dmy*_*yka的帖子

仅在基于范围的循环中迭代奇数(偶数)元素

假设我们有一个普通数组(或其他支持基于范围的循环的容器):

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++ c++11

8
推荐指数
1
解决办法
639
查看次数

为什么工会静态成员不存储为工会?

在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)

c++ union static-members

1
推荐指数
1
解决办法
149
查看次数

标签 统计

c++ ×2

c++11 ×1

static-members ×1

union ×1