繁体   English   中英

C ++中的向量初始化

[英]Vector Initialisation in C++

我在我的代码中使用Vectors。

导致错误的行如下:

vector<Node> alt_seq ;
alt_seq = vector<Node>(1000);
for(int j=0; j<alt_cf.getNoOfNodes(i); j++)
{
    Node temp_node = *alt_itr;
    alt_itr++;
    alt_seq.push_back(temp_node);
    }

这条线:

 alt_seq.push_back(temp_node);

导致运行时错误。 但是,如果我使用一些初始大小初始化Vector,如下所示:

vector<Node> alt_seq(1000) ;

在这种情况下,代码工作正常。 但是我不想给出初始大小,因为向量中的对象数量在运行时是可变的。 请帮我。 我是C ++的新手。

供您参考,完整的Method函数在这里:

http://pastebin.com/2dUFEui5

您的Node类有一个CombinedFragment*类型的指针成员,称为cfrag 如果您没有定义自己的复制ctor和赋值运算符,则会创建悬空引用。 此外,如果Node负责分配/解除分配cfrag ,则需要适当的dtor来防止泄漏。 如果您不想深度复制CombinedFragment ,可以使用shared_ptr

此外, Node的默认ctor可能甚至不需要在那里(它将cfrag为未初始化状态)。

我可以看到一个问题; 当你声明1000个vector对象,然后执行push_back你将添加到矢量的末尾,即你想要添加的对象是1001,1002 ......等等。如果声明1000个vector对象没有t给你一个运行时错误,我首先会看到默认定义是什么(因为前1000个节点对象有默认值),因为这不是错误输出并与我试图加载的实际数据进行比较。 希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM