|
|
1
1
标准算法并不真正使用
在非变异算法确实使用迭代器的地方,它们都是根据
我能想到的一件事是,不能在需要非常量引用的地方传递值。有没有需要非常量引用的非变异算法?如果任何函数参数等都有足够的
所以,对不起,我不能肯定地说,没有奇怪的角落出错,但这听起来基本上是可以的。即使有任何麻烦,您也可以在您的算法版本和标准算法版本之间的需求上有非常小的差异来修复它们。 编辑:第二件可能出错的事情是获取指针/引用并将它们保存得太长。据我所知,标准算法不保留对元素的指针或引用——原因是 容器 它保证指向元素的指针的有效性,迭代器类型只告诉您 迭代器 保持有效(例如,输入迭代器的副本在原始迭代器递增时不一定保持有效,而对于多通算法,可以用这种方式复制正向迭代器)。由于算法没有看到容器,只看到迭代器,所以我认为它们没有理由假定元素是持久的。 |
|
2
1
STL容器中的项目将一直被复制;例如,考虑何时必须重新分配向量。所以,您的示例很好,只是它只适用于随机迭代器。但我怀疑后者可能是故意的。:-p |
|
|
3
1
您希望您的范围在STL算法中可用吗?第一个元素和最后一个元素不是更好吗?(考虑到
|
|
|
4
1
既然你把“容器”放在“引号”里,你就可以随心所欲了。 stl-type-things(迭代器、容器上的各种成员函数..)返回引用,因为引用是lvalue,并且某些构造(即myvec[i]=otherthing)随后可以编译。想想std::map上的operator[]。对于常量引用,我想它不是一个值,只是为了避免复制。 不过,在方便的时候,这条规则一直被违反。迭代器类将当前值存储在成员变量中也很常见,只是为了返回引用或常量引用(是的,如果迭代器是高级的,则此引用将无效)。 如果您对这类东西感兴趣,您应该查看BoostIterator库。 |
|
|
Julia · 矢量中相加为总和S的值的数量 3 年前 |
|
|
C_Rod · 在模板方法中确定STL容器中项目的数据类型 4 年前 |
|
|
quantumwell · 将空向量放入std::map() 8 年前 |
|
|
OutOfBound · 对未初始化内存使用算法的优点 8 年前 |
|
|
DarthRubik · 在使用列表删除之后,迭代器如何不无效 8 年前 |