C++ Primer中为何用!来判断for循环是否结束呢?我觉得这样做不安全啊!比如说这样的语句:for (auto iter
C++ Primer中为何用!=来判断for循环是否结束呢?我觉得这样做不安全啊!
比如说这样的语句:
for (auto iter = Container.begin(); iter != Container.end(); ++ iter)
{
...
}
这就是所谓的通用性,但世上没有万能药,你需求不一样何必强求,还指责别人不够通用~
[解决办法]需要处理这种情况,自然有办法解决
之所以这样做,是为了数组,链表,向量等迭代器的相关的算法,可以通用。
对于你提到的,这种需要特别处理的地方,要么特别处理迭代器,要么特别处理算法。
其实,用STL输出容器,如果要求,不要有多余的分隔符,
不也是不能一次到位么?要不然,就需要添加多余的判断。
但是,STL 问世以来,好象没有人,抱怨这个问题。
甚至C,C++循环也做不到,简单的不用判断,就解决在这个问题;
也没有人抱怨C,C++的循环不好,输出语句不好。
任何和一个解决方案,都不是十全十美的。
个人感觉让容器,更有通用性,还是个比较好的解决方案,
感觉这种取舍是可取的。
因为STL更倾向于,让算法具有通用性。
[解决办法]楼主的问题,考虑太多了,现实问题是各不相同的,设计者只是设计了一个通用的格式,在应用的过程中还需要我们区根据自己的需要去改变。就像楼主提到的 要是把ix+=2,我们也可应用他的设计来完成。
如:for(size_t ix = 0; ix < array_size; ix+=2)
{
}
ix < array_size 这只是循环的检查条件而已,这个根据你的需求而定,是活的,不要太去纠结这些没意义的东西。
[解决办法]用 <= 得不同元素之间有先后关系 顺序关系
而stl里面有一些容器中不同元素之间并不存在这样的关系
<=比较的基础都没有 无计可施
[解决办法]书上不是说了吗, C++程序员多使用迭代器来遍历,
所以习惯了写
for(auto it = sv.begin(); it != sv.end(); ++it)
{
}
这种风格的代码,我觉得用!=会是代码看起来更精确
[解决办法]原则, 别个也已经说得很清楚了, 为了通用性.
因为stl遍历都使用了迭代器, 这个iterator又不支持大小比较. 因为你不知道容器中保存的是什么样的数据, 可能是一个基本数据类型, 可能是一个类或者结构体, 或者是一个指针.
[解决办法]小弟,不要在意这些细节。用!=来判断结束我不怎么喜欢,当i不是每次+1的时候,很容易出现死循环
[解决办法]作者的前提是++ix,自然可以用!=,ix+=2的话,作者就不会这么说了
[解决办法]对于链表其实也是合适的,只要 ++,+= 定义的合理
对于vector 看Iterator 如何定义如果直接定义成指针;
那就没有办法了,如果定义成一个类型,那还是有办法的。