操纵用new创建的向量

时间:2009-06-23 12:02:46

标签: c++ vector heap push-back

任何人都可以帮忙...

vector<unsigned int> *vVec = new vector<unsigned int>;
        vVec .reserve(frankReservedSpace);

        start = std::clock();
        for(int f=0; f<sizeOfvec; f++)
        {   //Populate the newly created vector on the heap
            vVec .push_back(pArray[f]);
        }

我得到了: 错误C2228:'.reserve'的左边必须有class / struct / union

我正在使用new运算符创建一个向量,以便它比创建它的函数更长。因此,这给了我一个指向堆上的向量而不是实际向量对象本身的指针。因此它不会让我执行push_backs的任何.reserve()。 我无法看到解决方法,有人可以帮忙吗?

4 个答案:

答案 0 :(得分:9)

vVec是一个指向矢量的指针。因此,您应该使用间接( - &gt;)运算符而不是点(。)

vector<unsigned int> *vVec = new vector<unsigned int>;
vVec->reserve(frankReservedSpace);

start = std::clock();
for(int f=0; f<sizeOfvec; f++)
{  //Populate the newly created vector on the heap
   vVec->push_back(pArray[f]);
}

答案 1 :(得分:1)

使用“ - &gt;”代替 ”。” vVec是指针类型,因此您需要使用operator ->来访问它指向的对象的成员。

答案 2 :(得分:0)

而不是

vVec.reserve(frankReservedSpace);

你想要:

vVec->reserve(frankReservedSpace);

答案 3 :(得分:0)

就个人而言,我并不关心你在变量名中构建的匈牙利符号。我宁愿看到比'vVec'更具域名性和自我记录的东西。如果您决定更改为链接列表,变量名称是否必须更改才能反映出来?显然答案是否定的。