来自指针的矢量大小

Size of Vector from pointer

本文关键字:指针      更新时间:2023-10-16

我正在编写一个类BitVector,其中我有一个返回BitVector容量的方法。 我的想法是调用 std::vector capacity((,但我得到一个我有点困惑的错误。 以下是我的方法:

int BitVector::Size() {
int size = (int) this->bitVector().capacity();
}

我遇到的错误是"表达式处理明显调用的括号必须具有(指针到-(函数类型。 这里有什么问题?

有关我的课程的其他背景信息:

我的 BitVector 类具有通常的公共构造函数、解构函数等,然后是指向矢量的私有指针,如下所示:

private:
std::vector<uint8_t>* bitVector;

在我的构造函数中,我将指针指向堆上的向量,如下所示:

BitVector::BitVector(int numBits) {
this->bitVector = new std::vector<uint8_t> (numBits, 0);
}

我不相信你在这里需要一个指针,只需将其声明为:

private:
std::vector<uint8_t> bitVector;

您不需要前缀this->访问类成员,并且int不是表示容量值的好类型(值为负的容量的平均值是什么?所以,在你的函数中,我会做:

int BitVector::Size() {
   auto size = bitVector.capacity();
}

但如果真的需要指针,你可以这样做:

int BitVector::Size() {
   auto size = bitVector->capacity();
}

使用指针衍生引用

编辑

正如@Donnie所指出的,此函数的返回类型也变得错误。如果您使用的是 C++14,并且假设您要返回 size 变量,则只需让编译器使用bitvector.capacity()用来保存其值的内容,就可以使您的生活变得简单。所以你的函数应该是:

auto BitVector::Size() {
   auto size = bitVector.capacity();
   return size;
}

bitVector只是一个成员,而不是一个函数。 这也是一个指针。

int size = (int)this->bitVector->capacity();

另外,请注意,std::vector<bool>已经专门化为位向量(每个布尔值使用 1 位(,因此您正在重新发明轮子。