2014-09-03 55 views
-4

令人奇怪的是,当我调试一段代码讨论,一个STL矢量的插入功能可能无法正常工作

a.insert(a.begin(), calculateSomeValue()); // a is of type std::vector<double> 

这个不起作用,因为从函数calculateSomeValue返回的值是不插入到a中并且大小不会增加。 但是当我把它分成两行下面,它的工作原理如我所料

double value = calculateSomeValue(); 
a.insert(a.begin(), value); 

你碰巧知道什么可能是可能的原因?

这是在Windows

+2

你的测试用具在哪里? – 2014-09-03 14:09:38

+0

我不得不说这不是寻求调试帮助,因为我有办法摆脱这个问题。我只想在这里与人讨论这个问题的可能原因,以便了解更多。 – KKKoo0 2014-09-04 07:28:49

+0

我只是觉得你们在投票前没有仔细考虑过,而且一旦有人这样做,一切都会如此。原来的标题对于包含“STL向量”,“插入功能”等所有关键词在内的所有关键词而言,显然已足够。 – KKKoo0 2014-09-04 07:29:44

回答

2

我只能假设的calculateSomeValue()的一个副作用是改变a这会使所有迭代器。

因为参数评价的a.insert(a.begin(), calculateSomeValue());的顺序是不确定它可能是前calculateSomeValue()所有迭代器失效,以aa.begin()进行评估。这是未定义的行为。