小编nub*_*lot的帖子

如何在 C++ 中的堆上使用位集?

如果我在堆栈上使用位集,我可以执行以下操作:

std::bitset<8> bset_s;
bset_s.flip(1);

std::cout << "Bitset on stack: " << bset_s << std::endl;
std::cout << "Element 1: " << bset_s[1] << std::endl;
Run Code Online (Sandbox Code Playgroud)

输出:

Bitset on stack: 00000010
Element 1: 1
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在堆上分配位集时:

std::bitset<8> * bset;
bset = new std::bitset<8>;

bset->flip(1);


std::cout << "Bitset on heap: " << * bset << std::endl;
std::cout << "Element 1: " << bset[1] << std::endl;
Run Code Online (Sandbox Code Playgroud)

输出:

Bitset on heap: 00000010
Element 1: 00000000
Run Code Online (Sandbox Code Playgroud)

如果我尝试访问第二位,我会得到一个空的 Bitset 而不是“1”。我究竟做错了什么?

c++ heap-memory std-bitset

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

C++ ranged 与手动 for 循环

我是 C++ 新手,为了练习,我一直在解决projecteuler.net上的一些问题。其中一个问题涉及分析一个 1000 位数字,因此我编写了一个程序,可以读取该数字并将其存储在一个向量中。为了测试我的代码,我已将向量打印到控制台。我很困惑,因为如果我使用手动指定的索引for循环,它会打印出正确的值,但是当我将 rangedforauto&关键字一起使用时,它会感到困惑并打印出错误的值。

这是我的代码:

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

vector<int8_t> reader(string datei)
{
    ifstream file;
    char inputChar;
    vector<int8_t> data;
    file.open(datei);
    while(file >> inputChar) 
        data.push_back(inputChar);
    file.close();

    return data;
}

int main()
{
    string a;
    cout << "Select file to open:" << endl;
    cin >> a;
    vector<int8_t> numbers = reader(a);
    for(int i = 0; i < numbers.size(); i++)
       cout << numbers[i];
    for(int i = 0; i < …
Run Code Online (Sandbox Code Playgroud)

c++ for-loop ranged-loops

3
推荐指数
2
解决办法
125
查看次数

标签 统计

c++ ×2

for-loop ×1

heap-memory ×1

ranged-loops ×1

std-bitset ×1