Elem törlése tömbből
Adott egy n elemű tömb és egy k index. Töröljük ki a tömbből a k indexű elemet!
Példa:
n = 6, k = 2
10 11 13 15 1 20
A tömb állapota a törlés után: 10 11 15 1 20, és n legyen 5.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| #include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int t[100];
for (int i = 0; i < n; i++)
cin >> t[i];
int k;
cout << "k = ";
cin >> k;
// törlés
for (int j = k+1; j < n; j++) {
t[j-1] = t[j];
}
n--;
// törlés másképp:
/*
for (int j = k; j <= n-2; j++) {
t[j] = t[j+1];
}
n--;
*/
// kiírás
for (int i = 0; i < n; i++)
cout << t[i] << " ";
cout << endl;
return 0;
}
|
HF: https://www.pbinfo.ro/probleme/1452/stergere-element (ugyanaz, csak itt 1-től kell sorszámozni).
Több elem törlése
Például adott tömbből töröljük az összes nullát!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| #include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int t[100];
for (int i = 0; i < n; i++)
cin >> t[i];
/*
*/
int i = 0;
while (i < n)
if (t[i] == 0) {
// töröljük t[i]-t
for (int j = i+1; j < n; j++)
t[j-1] = t[j];
n--;
// i++ nincs!
}
else
i++;
for (int i = 0; i < n; i++)
cout << t[i] << " ";
cout << endl;
return 0;
}
|
Vagy: végigjárhatjuk for-ral is, csak akkor erőltetve vissza kell csökkenteni i-t, hogy ugyanazon
a pozíción maradhassunk.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| #include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int t[100];
for (int i = 0; i < n; i++)
cin >> t[i];
for (int i = 0; i < n; i++)
if (t[i] == 0) {
// töröljük t[i]-t
for (int j = i+1; j < n; j++)
t[j-1] = t[j];
n--;
i--;
}
for (int i = 0; i < n; i++)
cout << t[i] << " ";
cout << endl;
return 0;
}
|
Hatékonyabb változat több elem törlésére
Ötlet: járjuk végig csak egyszer a tömböt és mindenkit
tegyünk a végleges helyére.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| #include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int t[100];
for (int i = 0; i < n; i++)
cin >> t[i];
int i_olvas = 0;
int i_ir = 0;
while (i_olvas < n) {
if (t[i_olvas] != 0)
{
t[i_ir] = t[i_olvas];
i_ir++;
}
i_olvas++;
}
n = i_ir;
for (int i = 0; i < n; i++)
cout << t[i] << " ";
cout << endl;
return 0;
}
|