Для ўстаўкі элемента на месца k неабходна вызваліць гэта месца ў масіве. Для гэтага трэба зрушыць на адну пазіцыю ўправа ўсе элементы масіву, якія стаяць пасля k - 1. Зрух пачынаем з апошняга элемента. Колькасць элементаў у масіве павялічыцца на 1. Гэтыя дзеянні рэалізаваны ў функцыі insert. Маюцца наступныя магчымасці выкліку функцыі insert:
insert(pos, value)
|
Устаўляе value перад элементам, на які паказвае pos
|
insert(pos, value, count)
|
Устаўляе count копій значэння value перад элементам, на які паказвае pos
|
insert(pos, first, last)
|
Устаўляе элементы з дыяпазону [first, last) перад элементам, на які паказвае pos
|
Параметры pos, first, last з’яўляюцца ітэратарамі.
Прыклад 14.9. Зададзены масіў цэлых лікаў. Уставіць лік x а k-е месца, калі элемент a[k] кратны x.
Этапы выканання задання
I. Зыходныя даныя: аднамерны масіў а, колькасць элементаў n, лік, які трэба ўставіць у масіў x.
II. Вынік: пераўтвораны масіў a.
III. Алгарытм рашэння задачы.
1. Увод зыходных даных. 2. У цыкле правяраем элементы масіву. 3. Калі бягучы элемент кратны x, то ўстаўляем лік x у масіў. 4. Вывад выніку.
IV. Апісанне пераменных: n, x – int, а – vector <int>. |
Прыклад 14.9.
V. Праграма:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n;
cout << "n = ";
cin >> n;
vector <int> a(n);
for (int i = 0; i < n; i++)
cin >> a[i];
int x;
cout << "x = ";
cin >> x;
for (int i = n - 1; i >= 0; i--)
if (a[i] % x == 0)
a.insert(a.begin() + i, x);
for (int i = 0; i < a.size(); i++)
cout << a[i] << " ";
cout << endl;
return 0;
}
|
VI. Тэсціраванне.

VI. Аналіз вынікаў. Лік 5 устаўлены перад значэннямі 10, 15, 30, 20, 45.
У праграме выкарыстоўваецца абход масіву з канца. Калі ў праграме запісаць такі цыкл:
for (int i = 0; i < a.size(); i++)
if (a[i] % x == 0)
a.insert(a.begin() + i, x);
|
то праграма можа зацыкліцца. Напрыклад, на нулявым месцы стаіць лік 10, які задавальняе ўмову задачы. На яго месца ўставілі лік 5. Лік 10 зрушыўся на пазіцыю 1 і будзе зноў правярацца на наступнай ітэрацыі цыкла, і зноў зрушыцца ўправа.
|