C++中的std :: vector是否会压缩?我的意思是我已经读过std :: vector可以将8个布尔值组合成1个字节.但是,当我在visual studio中尝试此代码时,
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<bool> array {true, false, false, true, true,false,false,true};
cout << sizeof(array) << endl;
cout << sizeof(array[0]) << endl;
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它打印:
24
16
Run Code Online (Sandbox Code Playgroud)
而在另一个IDE中,例如代码块,它打印20和8.
我不太清楚这里的布尔值.
我以为const char*表示一个指向不可变字符串的可变指针.
但是,当我这样做时,
#include <iostream>
using namespace std;
const char *name1 = "Alex";
int main()
{
name1 = "John";
cout << name1 << endl;
}
Run Code Online (Sandbox Code Playgroud)
它只是打印约翰并没有显示任何问题.我想知道为什么程序将name1视为字符串并使其可变?
我不太了解vector::begin()实际返回的内容.
Cplusplus.com告诉我vector::begin()返回向量的迭代器,这意味着,vector<int> v;它将给出0.
但是,当我在Visual Studio上调试时,监视表显示了第一个元素的值v.此外,"类型"列表示它是a std::_Vector_iterator.
结果,究竟是什么输出vector::begin()?
我有2个班:
#include <iostream>
using namespace std;
class A
{
public:
virtual void print()=0;
};
class B: public A
{
public:
void print()
{
cout<<"B\n";
}
void printNew()
{
cout<<"Print new";
}
};
int main()
{
B b;
A *a=new B;
a->printNew();
delete a;
}
Run Code Online (Sandbox Code Playgroud)
编译器发布错误.如果我想通过A使用printNew,我该怎么办?我认为它必须包含此功能,因为这证明在各种情况下都很有用.