相关疑难解决方法(0)

如果增加一个等于STL容器的结束迭代器的迭代器,会发生什么

如果我将迭代器指向向量的最后一个元素时,它会增加2怎么办?在这个询问如何通过2个元素调整到STL容器的迭代器的问题中,提供了两种不同的方法:

  • 使用算术运算符的形式 - + = 2或++两次
  • 或者使用std :: advance()

当迭代器指向STL容器的最后一个元素或更远时,我用VC++ 7测试了它们的边缘情况:

vector<int> vec;
vec.push_back( 1 );
vec.push_back( 2 );

vector<int>::iterator it = vec.begin();
advance( it, 2 );
bool isAtEnd = it == vec.end(); // true
it++; // or advance( it, 1 ); - doesn't matter
isAtEnd = it == vec.end(); //false
it = vec.begin();
advance( it, 3 );
isAtEnd = it == vec.end(); // false
Run Code Online (Sandbox Code Playgroud)

我已经看过有时可以建议在遍历vector和其他容器时与vector :: end()进行比较:

for( vector<int>::iterator it = vec.begin(); it != vec.end(); …
Run Code Online (Sandbox Code Playgroud)

c++ iterator stl vector

62
推荐指数
3
解决办法
3万
查看次数

如何反转位集中的位?

例如,我有整数

一 = 10;

它的二进制表示(对于 32 位整数)是

00000000000000000000000000001010

反过来,它变成

01010000000000000000000000000000

现在我已经看到了这段代码,来自这篇topcoder article可以完成这个

x = ((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1);
x = ((x & 0xcccccccc) >> 2) | ((x & 0x33333333) << 2);
x = ((x & 0xf0f0f0f0) >> 4) | ((x & 0x0f0f0f0f) << 4);
x = ((x & 0xff00ff00) >> 8) | ((x & 0x00ff00ff) << 8);
x = ((x & 0xffff0000) >> 16) | ((x & 0x0000ffff) << 16);
Run Code Online (Sandbox Code Playgroud)

现在有一些简单的方法可以达到相同的效果。也许通过将我们的位集转换为字符串,然后将其反转?将 …

c++ bits bitset c++11

5
推荐指数
2
解决办法
7624
查看次数

标签 统计

c++ ×2

bits ×1

bitset ×1

c++11 ×1

iterator ×1

stl ×1

vector ×1