Я определил следующий класс.
class STTreeNode
{
public:
int ind;
int parentInd;
std::vector<int> childInds;
int numTrain;
std::vector<bool> isInfluenced;
STTreeNode(int ind, int parentInd, int numTrain);
};
STTreeNode::STTreeNode(int ind, int parentInd, int numTrain) {
this->ind = ind;
this->parentInd = parentInd;
this->numTrain = numTrain;
}
и я выполнил следующий фрагмент кода.
STTreeNode *a = new STTreeNode(3, 4, 5);
a->childInds.push_back(20);
a->childInds.push_back(30);
a->isInfluenced.push_back(true);
a->isInfluenced.push_back(false);
for (int i = 0; i < a->childInds.size(); i++)
std::cout << &(a->childInds[i]) << " ";
std::cout << std::endl;
for (int i = 0; i < a->isInfluenced.size(); i++)
std::cout << &(a->isInfluenced[i]) << " ";
std::cout << std::endl;
Вывод был
0000020351C18520 0000020351C18524
00000083540FFC60 00000083540FFC60
Я очень смущен этим. Почему два элемента в a->childInd
имеют последовательные адреса (как и ожидалось), а два элемента в a->isInfluenced
, кажется, имеют один и тот же адрес?
Обновление:
Из комментариев я понимаю, что это связано с разницей между vector<bool>
и другими vector
. Существуют ли какие-либо особые случаи с vector
, о которых мне следует знать, или же vector<bool>
- единственный, на который мне нужно обратить внимание?