【问题标题】:Size of Vector from pointer来自指针的向量大小
【发布时间】:2017-05-07 17:56:02
【问题描述】:

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

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

我遇到的错误是“明显调用的表达式前括号必须具有 (pointer-to-) 函数类型。这里有什么问题?

关于我的班级的其他背景信息:

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

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

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

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

【问题讨论】:

  • bitVector 是一个指针,必须取消引用,this-&gt;bitVector().capacity(); -> bitVector()-&gt;capacity();
  • 你真的需要使用指向你的向量的指针吗?
  • 可能不会,只有矢量会更有意义吗?不过,我确实需要它。所以我认为指针有意义吗?非常新的 C++ 程序员!感谢您的建议
  • @Vic 向量将所有实际数据存储在堆上,因此很难找到指向它们的理由:)
  • 事实上,向量基本上是一个动态数组,所有繁琐的部分都在幕后为您完成。

标签: c++ pointers vector capacity


【解决方案1】:

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

private:
std::vector<uint8_t> bitVector;

访问类成员不需要this-&gt;前缀,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;
}

【讨论】:

  • 你可能应该从这些函数中返回一些东西。
【解决方案2】:

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

int size = (int)this-&gt;bitVector-&gt;capacity();

另外,请注意 std::vector&lt;bool&gt;already specialized 转换为位向量(每个布尔使用 1 位),因此您是在重新发明轮子。

【讨论】:

  • 谢谢!所以我认为我不理解执行 bitVector.capacity() 和 bitVector->capacity() 之间的区别。我以为 -> 意味着取消引用。
  • 确实如此。您的 bitVector 是一个指针,因此您必须尊重它才能访问它的任何成员。
猜你喜欢
  • 1970-01-01
  • 2011-08-04
  • 2016-07-17
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
  • 1970-01-01
  • 2014-07-22
  • 2020-09-08
相关资源
最近更新 更多