我正在实现mergeSort,我需要将主向量的子向量传递给fucntion。
我使用主向量中的迭代器初始化子向量,但它没有初始化。
请参阅b
和c
向量。
b 应该是[5,1]而 c 应该是[7]。
我做错了什么? “符号含糊不清”是什么意思?为什么它含糊不清?
答案 0 :(得分:3)
第二个迭代器应指向最后一个之后的一个元素。
vector<unsigned int> b(v.begin(), v.begin()+middle);
vector<unsigned int> c(v.begin()+middle, v.end());
如果您希望第一部分更大,向上middle
向上而不是向零:
unsigned int middle = (v.size()+1)/2;
答案 1 :(得分:1)
Vector v有3个元素。所以v.size()/ 2将等于1.要定义向量b和c,你需要编写
std::vector<unsigned int> b( v.begin(), std::next( v.begin(), middle ) );
std::vector<unsigned int> c( std::next( v.begin(), middle ), v.end() );
考虑到向量的有效范围是
[v.begin(), std::next( v.begin(), middle ) )
和
[std::next( v.begin(), middle ), v.end() )
答案 2 :(得分:1)
迭代器范围半开。 begin迭代器引用范围中的第一个元素,end iterator引用一个范围中的最后一个项。这通常写为[first, one past last)
。
将它与你的代码放在一起,范围[v.begin() + middle + 1, v.end()-1)
意味着“从中间+ 1开始到最后1结束的范围”,即你忽略了你想要的范围的第一个和最后一个元素。 / p>
要解决它,你需要在第二行中删除迭代器算术。