![]() |
1
42
好吧,你问一个数组。您可以很容易地获得指向其元素的指针,因此基本上可以归结为指针是否可以透明地与STL函数一起使用的问题。指针实际上是最强大的迭代器。有不同的种类
现在,第二组中的每个迭代器都支持前面提到的所有迭代器的所有内容。指针为最后一种迭代器建模——随机访问迭代器。您可以加/减任意整数,也可以读写。除输出迭代器外,其他所有迭代器都有
通常,迭代器有几个typedef作为成员
无论它是指针还是其他迭代器,它都将为您提供该迭代器的值\类型。
|
![]() |
2
18
事实上,一个可能的实现
当然,对于一个数组,您将没有有用的
编辑:实际上,正如在注释和其他答案中提到的,如果数组不是动态的,并且没有衰减为指针,那么可以为数组实现这些函数。但我的基本观点是,你必须比使用标准容器时更加小心。 |
![]() |
3
7
指针完成了成为随机访问迭代器所需的一切工作。因此,它是一个随机访问迭代器,可以在STL算法中使用。你可以看看向量实现;你很可能会发现
这不会使数组成为有效的STL容器,但会使指针成为有效的STL迭代器。 |
![]() |
4
4
对
迭代器的设计具有与指针相似的语义。
|
![]() |
5
2
与其使用数组,然后担心将它们传递给STL函数(人们可能称之为“向前兼容性”,因此很脆弱),IMO您应该使用std::vector,并在需要使用数组的函数时,使用其(稳定可靠的)向后兼容性。 因此,您的代码变成:
如果您需要将“a”传递给C API,您可以这样做,这要感谢向量与数组的二进制兼容性。 |
![]() |
6
2
这个
introduction to
|
![]() |
7
2
answer : 数组不是指针,即使它们很容易衰减为指针。编译器关于数组的信息比容器的信息多:
虽然您不能询问数组的大小,但编译器将在调用给定模板时解析它。
现在,如果你调用一个函数
如果
@利特:你说得对。我做过这个测试,但它是对数组的引用,而不是数组。谢谢你指出这一点。
|
![]() |
8
1
|
![]() |
9
1
指针模型 Trivial Iterator ,以及来自阵列模型的指针 Random Access Iterator 如果您对每个S(T)L算法的使用限制感兴趣,请熟悉 iterator models . |
![]() |
10
0
As int a[]可以被视为指针。在C++指针中可以递增,然后指向下一个元素。由于指针可以比较,所以指针可以用作迭代器。
|
![]() |
11
-1
|
|
Julia · 矢量中相加为总和S的值的数量 2 年前 |
![]() |
C_Rod · 在模板方法中确定STL容器中项目的数据类型 2 年前 |
![]() |
quantumwell · 将空向量放入std::map() 7 年前 |
![]() |
OutOfBound · 对未初始化内存使用算法的优点 7 年前 |
![]() |
DarthRubik · 在使用列表删除之后,迭代器如何不无效 7 年前 |