首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std向量迭代器不支持地址算法?

std向量迭代器不支持地址算法?
EN

Stack Overflow用户
提问于 2014-01-02 10:35:54
回答 3查看 127关注 0票数 0

我正在实现mergeSort,我需要将主向量的一个子向量传递给函数。我使用主向量的迭代器初始化子向量,但它没有初始化。请参阅bc矢量。

b为5,1,c为7。

我做错了什么?“符号是模棱两可”是什么意思?为什么是模棱两可的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-02 10:39:20

第二个迭代器应该指向最后一个元素之后的一个元素。

代码语言:javascript
复制
vector<unsigned int> b(v.begin(), v.begin()+middle);
vector<unsigned int> c(v.begin()+middle, v.end());

如果您希望第一部分更大,则将middle向上旋转,而不是向零:

代码语言:javascript
复制
unsigned int middle = (v.size()+1)/2;
票数 3
EN

Stack Overflow用户

发布于 2014-01-02 10:57:35

矢量V有三个元素。因此,v.size() /2等于1。要定义向量b和c,需要编写

代码语言:javascript
复制
std::vector<unsigned int> b( v.begin(), std::next( v.begin(), middle ) );
std::vector<unsigned int> c( std::next( v.begin(), middle ), v.end() );

考虑到向量的有效范围是

代码语言:javascript
复制
[v.begin(), std::next( v.begin(), middle ) )

代码语言:javascript
复制
[std::next( v.begin(), middle ), v.end() )
票数 1
EN

Stack Overflow用户

发布于 2014-01-02 11:24:00

爱尔兰人的范围半开着。begin迭代器引用范围中的第一个元素,end迭代器引用1过去的范围中的最后一个项目。这通常被写成[first, one past last)

将其与代码放在一起,range [v.begin() + middle + 1, v.end()-1)意味着“从中间+1开始到最后-1结束的范围”,也就是说,您忽略了所需范围的第一个和最后一个元素。

要解决这个问题,只需删除第二行中的迭代算法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20881006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档