4. Range find(Range, E)(Range r, E e) {
for (; !r.empty; r.popFront) {
if (r.front == e) break;
}
return r;
}
Código en lenguaje de programación D.
¡Perdón!
5. template <typename I, typename T>
I find(I f, I l, T const& x) {
while (f != l && *f != x) ++f;
return f;
}
Versión C++98
(sin especificaciones)
44. Range find(Range, E)(Range r, E e) {
auto c = r[$ - 1];
r[$ - 1] = e;
size_t i = 0;
{
scope(exit) r[$ - 1] = c;
for (;; ++i)
if (r[i] == e) break;
}
if (i + 1 == r.length && c != e)
++i;
return r[i .. $];
}
45. Range find(Range, E)(Range r, E e) {
auto c = r[$ - 1];
r[$ - 1] = e;
size_t i = 0;
for (;; ++i)
if (r[i] == e) break;
r[$ - 1] = c;
if (i + 1 == r.length && c != e)
++i;
return r[i .. $];
}
46. H e l l o , _ W o r l d !
$
,element:
range
string s = “Hello, World!”;
auto r = find(s, ',');
print(r);
47. Range find(Range, E)(Range r, E e) {
auto c = r[$ - 1];
r[$ - 1] = e;
H e l l o , _ W o r l d !
$
,element:
range
$ - 1
48. Range find(Range, E)(Range r, E e) {
auto c = r[$ - 1];
r[$ - 1] = e;
H e l l o , _ W o r l d !
$
,element:
range
$ - 1
!c:
49. Range find(Range, E)(Range r, E e) {
auto c = r[$ - 1];
r[$ - 1] = e;
H e l l o , _ W o r l d ,
$
,element:
range
!c:
50. Range find(Range, E)(Range r, E e) {
...
size_t i = 0;
for (;; ++i)
if (r[i] == e) break;
H e l l o , _ W o r l d ,
$
,
=
range
51. Range find(Range, E)(Range r, E e) {
...
size_t i = 0;
for (;; ++i)
if (r[i] == e) break;
H e l l o , _ W o r l d ,
$
,
=
range
52. Range find(Range, E)(Range r, E e) {
...
size_t i = 0;
for (;; ++i)
if (r[i] == e) break;
H e l l o , _ W o r l d ,
$
,
=
range
53. Range find(Range, E)(Range r, E e) {
...
size_t i = 0;
for (;; ++i)
if (r[i] == e) break;
H e l l o , _ W o r l d ,
$
,
=
range
54. Range find(Range, E)(Range r, E e) {
...
size_t i = 0;
for (;; ++i)
if (r[i] == e) break;
H e l l o , _ W o r l d ,
$
,
=
range
55. Range find(Range, E)(Range r, E e) {
...
size_t i = 0;
for (;; ++i)
if (r[i] == e) break;
H e l l o , _ W o r l d ,
$
,
=
range
56. Range find(Range, E)(Range r, E e) {
...
r[$ - 1] = c;
if (i + 1 == r.length && c != e)
++i;
return r[i .. $];
}
H e l l o , _ W o r l d !
$
$ - 1
!c:
range
57.
58. string s = “Hello, World!”;
auto r = find(s, '?');
print(r);
59. Range find(Range, E)(Range r, E e) {
auto c = r[$ - 1];
r[$ - 1] = e;
H e l l o , _ W o r l d !
$
?element:
range
$ - 1
60. Range find(Range, E)(Range r, E e) {
auto c = r[$ - 1];
r[$ - 1] = e;
H e l l o , _ W o r l d !
$
?element:
range
$ - 1
!c:
61. Range find(Range, E)(Range r, E e) {
auto c = r[$ - 1];
r[$ - 1] = e;
H e l l o , _ W o r l d ?
$
?element:
range
!c:
62. Range find(Range, E)(Range r, E e) {
...
size_t i = 0;
for (;; ++i)
if (r[i] == e) break;
H e l l o , _ W o r l d ?
$
?
=
range
63. Range find(Range, E)(Range r, E e) {
...
size_t i = 0;
for (;; ++i)
if (r[i] == e) break;
H e l l o , _ W o r l d
$
?
=
range
64. Range find(Range, E)(Range r, E e) {
...
size_t i = 0;
for (;; ++i)
if (r[i] == e) break;
H e l l o , _ W o r l d ?
$
?
=
range
65. Range find(Range, E)(Range r, E e) {
...
size_t i = 0;
for (;; ++i)
if (r[i] == e) break;
H e l l o , _ W o r l d ?
$
?
=
range
66. Range find(Range, E)(Range r, E e) {
...
size_t i = 0;
for (;; ++i)
if (r[i] == e) break;
H e l l o , _ W o r l d ?
$
?
=
range
67. Range find(Range, E)(Range r, E e) {
...
size_t i = 0;
for (;; ++i)
if (r[i] == e) break;
H e l l o , _ W o r l d ?
$
?
=
range
68. Range find(Range, E)(Range r, E e) {
...
size_t i = 0;
for (;; ++i)
if (r[i] == e) break;
H e l l o , _ W o r l d ?
$
?
=
range
69. Range find(Range, E)(Range r, E e) {
...
size_t i = 0;
for (;; ++i)
if (r[i] == e) break;
H e l l o , _ W o r l d ?
$
?
=
range
70. Range find(Range, E)(Range r, E e) {
...
size_t i = 0;
for (;; ++i)
if (r[i] == e) break;
H e l l o , _ W o r l d ?
$
?
=
range
71. Range find(Range, E)(Range r, E e) {
...
size_t i = 0;
for (;; ++i)
if (r[i] == e) break;
H e l l o , _ W o r l d ?
$
?
=
range
72. Range find(Range, E)(Range r, E e) {
...
size_t i = 0;
for (;; ++i)
if (r[i] == e) break;
H e l l o , _ W o r l d ?
$
?
=
range
73. Range find(Range, E)(Range r, E e) {
...
size_t i = 0;
for (;; ++i)
if (r[i] == e) break;
H e l l o , _ W o r l d ?
$
?
=
range
74. Range find(Range, E)(Range r, E e) {
...
size_t i = 0;
for (;; ++i)
if (r[i] == e) break;
H e l l o , _ W o r l d ?
$
?
=
range
75. Range find(Range, E)(Range r, E e) {
...
r[$ - 1] = c;
if (i + 1 == r.length && c != e)
++i;
return r[i .. $];
}
H e l l o , _ W o r l d !
$
$ - 1
!c:
range
?element:
76. Range find(Range, E)(Range r, E e) {
...
r[$ - 1] = c;
if (i + 1 == r.length && c != e)
++i;
return r[i .. $];
}
H e l l o , _ W o r l d !
$
?
=
range
77. Range find(Range, E)(Range r, E e) {
...
r[$ - 1] = c;
if (i + 1 == r.length && c != e)
++i;
return r[i .. $];
}
H e l l o , _ W o r l d !
$
range
96. Sí,es útil.
El problema con la
implementación de Andrei
es que está cambiando
la semántica
de un algoritmo conocido,
donde uno no espera que se
modifiquen datos.
97. Conclusión: Especificar y usar
nombres correctos.
En la próxima charla veremos
como implementarla correctamente
en C++ usando Concepts.