注册 登录
编程论坛 C++教室

C++的list怎么寻找中间的迭代器

chy9003 发布于 2012-07-31 17:01, 2257 次点击
C++的list怎么寻找中间的迭代器
除了
程序代码:
list<int>::iterator mid(list<int>::iterator beg, list<int>::iterator end){
    while(beg!=end){
        end--;
        if(beg==end)
            return beg;
        beg++;
    }
    if(beg==end)
        return beg;
}
以外还有其他方法吗
6 回复
#2
lz10919149992012-07-31 17:42
list<int>::iterator mid(list<int>::iterator beg, list<int>::iterator end){
    return beg + (end - beg)/2;
}
#3
rjsp2012-08-01 08:47
首先,你的代码逻辑就是错误的;错了逻辑错误,其他也没有什么正确的地方

程序代码:
std::list<int>::iterator mid( std::list<int>::iterator beg, std::list<int>::iterator end )
{
    std::list<int>::difference_type dif = distance( beg, end );
    std::advance( beg, dif/2 );
    return beg;
}

const_iterator的也一样

#4
chy90032012-08-01 09:30
回复 3楼 rjsp
额。。能不能说明下我的逻辑错误在哪啊
我觉得没错啊。。。
#5
chy90032012-08-01 09:50
回复 2楼 lz1091914999
2L的代码编译报错了
#6
hepper2012-08-01 13:42
回复 5楼 chy9003
list迭代器不支持算术运算吧。。
#7
pangding2012-08-01 23:46
楼主如果愿意自己用 while 找也行。用 dictance 和 advance 其实也是遍历链表,不过好处是代码比较清楚。
1