加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 将vector转换为int

发布时间:2020-12-16 10:10:07 所属栏目:百科 来源:网络整理
导读:我有一个bool的向量,我想在更大的int容器中复制.有没有快速的方法来做到这一点? 澄清一下,有没有更聪明的方法来实现这一目标? #include vector#include cstdint#include iostream#include climits#include cassertinline size_t bool2size_t(std::vectorbo
我有一个bool的向量,我想在更大的int容器中复制.有没有快速的方法来做到这一点?

澄清一下,有没有更聪明的方法来实现这一目标?

#include <vector>
#include <cstdint>
#include <iostream>
#include <climits>
#include <cassert>


inline size_t bool2size_t(std::vector<bool> in) {
    assert(sizeof(size_t)*CHAR_BIT >= in.size());
    size_t out(0);

    for (size_t vecPos = 0; vecPos < in.size(); vecPos++) {
        if (in[vecPos]) {
            out += 1 << vecPos;
        }
    }

    return out;
} 

int main () {
    std::vector<bool> A(10,0);
    A[2] = A[4] = 1;

    size_t B = bool2size_t(A);

    std::cout << (1 << 2) + (1 << 4) << std::endl;
    std::cout << B << std::endl;
}

我正在寻找像memcpy这样的东西,我可以在subbyte级别上使用.

解决方法

这是使用C 11的示例

#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    vector<bool> b(10,0);
    b[2] = b[4] = 1;
    int i;
    i = accumulate(b.rbegin(),b.rend(),[](int x,int y) { return (x << 1) + y; });
    cout << i << endl;
}

另一种使用gcc内部构造用于向量< bool>的解决方案并且效率更高:

#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    vector<bool> b(10,0);
    b[2] = 1;
    b[4] = 1;
    auto p = b.begin()._M_p;
    cout << *p << endl;
}

请注意,不建议使用vector< bool>因为它是向量< T>的有问题的特化.并且API略有不同.我建议使用vector< char>相反,或创建自己的Bool包装类与隐式强制转换为bool.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读