【发布时间】:2018-12-17 17:24:33
【问题描述】:
我在使用矢量时遇到问题
考虑执行以下操作的代码:
int main(int argc, const char * argv[]) {
printf("%s\n","CreateNewVector");
vector<int> *vector1 = createNewVector(5);
if(vector1){
delete vector1;
vector1=NULL;
}
printf("%s\n","AddToVector");
vector<int> vector2;
if(AddToVector(vector2))
{
}
if(vector1)
{
delete vector1;
vector1 = NULL;
}
return 0;
}
奇怪的是,它在调用 createNewVector(5) 时会打印以下内容!
CreateNewVector
Pushing createNewVector 5
Pushing createNewVector 4
Pushing createNewVector 3
Pushing createNewVector 2
Pushing createNewVector 1
0 0 0 0 0 5 4 3 2 1
这里是 CreateNewVector 的代码
vector<int> * createNewVector(int n) {
// YOUR CODE HERE
vector<int> *vector1 = new vector<int>(n);
for (int i=n;i>0;--i)
{
printf("Pushing %s %d\n",__FUNCTION__,i);
vector1->push_back(i);
}
printf("\n");
for(auto it = vector1->begin(); it!=vector1->end();it++)
printf("%d ",*it);
printf("\n");
return vector1;
}
相比之下,我有另一个代码(使用 AddToVector),它仅通过引用获取一个向量,并仅使用相同的 API 添加到它
vector1->push_back(i);
Code for AddToVector
bool AddToVector(vector<int> &vector) {
// YOUR CODE HERE
int n = 5;
for (int i=n;i>0;--i)
{
printf("Pushing %s %d\n",__FUNCTION__,i);
vector.push_back(i);
}
printf("\n");
for(auto it = vector.begin(); it!=vector.end();it++)
printf("%d ",*it);
printf("\n");
return true;
}
我对还有一些冗余 0 的序列一无所知
现在,当我替换以向量作为参考的代码并且有点做同样的事情时,输出很清楚并且是预期的。 输出如下: 添加到向量
Pushing AddToVector 5
Pushing AddToVector 4
Pushing AddToVector 3
Pushing AddToVector 2
Pushing AddToVector 1
5 4 3 2 1
【问题讨论】:
-
几乎没有理由像这样动态创建矢量。
-
为什么在 C++ 程序中使用 C I/O?向量将为您管理动态内存分配,因此您不必自己使用
new进行分配。您需要做的就是vector<int> foo;。AddToVector在总是返回 true 时返回 bool 有什么意义?