注册 登录
编程论坛 C++教室

i != boost::dynamic_bitset<>::npos; 这行代码是什么意思?

a111234567 发布于 2023-07-26 17:38, 852 次点击
void StudyWidgets::GetPrime(int num)
{
    boost::dynamic_bitset<> db(num);//0000000000
    db.set();//1111111111
 
    for (auto i = db.find_next(1); i != boost::dynamic_bitset<>::npos; i = db.find_next(i))
    {
        for (auto j = db.find_next(i); j != boost::dynamic_bitset<>::npos; j = db.find_next(j))
        {
            if (j%i == 0)
            {
                db[j] = 0;
            }
        }
        //索引:  9 8 7 6 5 4 3 2 1 0   
        //i = 2时:1 0 1 0 1 0 1 1 1 1
        //i = 3时:0 0 1 0 1 0 1 1 1 1
        //i = 5时:0 0 1 0 1 0 1 1 1 1
        //i = 7时:0 0 1 0 1 0 1 1 1 1
        std::cout << std::endl << "i=" << i << "时:";
        for (size_t m = db.size() - 1; m >= 0 && m < db.size(); m--)//注意条件,因为当m=0时,m--后 m=18446744073709551615
        {
            std::cout << db[m] << " ";
        }
    }
    std::cout << std::endl;
    //0010101111
    for (auto i = db.find_next(1); i != boost::dynamic_bitset<>::npos; i = db.find_next(i))
    {
        std::cout << i;   //2 3 5 7
    }
}
4 回复
#2
rjsp2023-07-26 21:16
筛选法求素数
把2的倍数(不包含2)全去掉
把3的倍数(不包含3)全去掉
把5的倍数(不包含5)全去掉
……
#3
rjsp2023-07-26 21:24
m >= 0 挺那啥的,无符号整数必然大于等于零

boost::dynamic_bitset 没必要,std::vector<bool> 就是按 1bit 操作的
#4
a1112345672023-07-26 21:37
npos是什么
#5
rjsp2023-07-27 07:30
以下是引用a111234567在2023-7-26 21:37:54的发言:

npos是什么

表示“没找到”
1