我正在实现mergeSort,我需要将主向量的一个子向量传递给函数。我使用主向量的迭代器初始化子向量,但它没有初始化。请参阅b和c矢量。
b为5,1,c为7。
我做错了什么?“符号是模棱两可”是什么意思?为什么是模棱两可的?

发布于 2014-01-02 10:39:20
第二个迭代器应该指向最后一个元素之后的一个元素。
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;发布于 2014-01-02 10:57:35
矢量V有三个元素。因此,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() )发布于 2014-01-02 11:24:00
爱尔兰人的范围半开着。begin迭代器引用范围中的第一个元素,end迭代器引用1过去的范围中的最后一个项目。这通常被写成[first, one past last)。
将其与代码放在一起,range [v.begin() + middle + 1, v.end()-1)意味着“从中间+1开始到最后-1结束的范围”,也就是说,您忽略了所需范围的第一个和最后一个元素。
要解决这个问题,只需删除第二行中的迭代算法。
https://stackoverflow.com/questions/20881006
复制相似问题