几个月来,我一直在研究 C++,并且大部分时间都被谷歌指示堆栈溢出以进行 C++ 查询。我经常注意到“为什么不使用矢量”类型的劝告,并受到启发去做这件事。
因此,主要是为了获得自动内存释放的次要好处,并能够编写类型化的比较函数进行排序。我将指向对象的指针数组切换为向量。现在我认为(似乎不正确)向量可以或多或少地像数组一样使用,因此我这样初始化:
cluster clusters[LOTS];
vector<cluster *> pclust;
pclust.reserve(numClust);
for (int i=0; i<numClust; ++i)
pclust[i] = clusters + i;
编译器没有抱怨。然后一段时间后,我需要根据集群对象的某些属性对向量进行排序。所以:
std::sort(pclust.begin(), pclust.end(), ClusterCompareNumSegs);
再次编译没有问题。除了向量没有排序。事实证明 vector.size() 为零,当然我的初始化应该是
pclust.push_back(clusters + i);
现在这很容易解决,但我很困惑,因为最初的错误分配有效。我成功地遍历了向量 - 使用数组语法,如下所示:
for (clustind=0; clustind < numClust; ++clustind) {<br>
cluster *cl = pclust[clustind];
...happily access *cl...
这一切都很好。所以我只是想知道发生了什么。大概在我最初的任务中,我试图访问尚未在向量中的元素(我试图将它们放入),并且向量抛出了我忽略的异常。但尽管如此,当引用位置时,指针就在那里。任何人都可以提供启示吗?