如果我在堆栈上使用位集,我可以执行以下操作:
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++ 新手,为了练习,我一直在解决projecteuler.net上的一些问题。其中一个问题涉及分析一个 1000 位数字,因此我编写了一个程序,可以读取该数字并将其存储在一个向量中。为了测试我的代码,我已将向量打印到控制台。我很困惑,因为如果我使用手动指定的索引for循环,它会打印出正确的值,但是当我将 rangedfor与auto&关键字一起使用时,它会感到困惑并打印出错误的值。
这是我的代码:
#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)