Следующий пост -

Функция dubplicate_elements().

Рубрика: C++, Дата: 10 May, 2013, Автор:

Кратко опишите возможное поведение функции dublicate_elements() из параграфа 16.3.6 для vector<string>, состоящего из трех элементов: don’t do this (не делай этого).

Ну что ж господа! Сейчас я вам приведу пример этой функции, сам код этой функции и мы поговорим по поводу этой строки.

Сам код функции dublicate_elements():

void duplicate_elements(vector<string>& f)
{
	for(vector<string>::iterator p=f.begin();p!=f.end();++p)
	f.insert(p,*p);//Не надо!
}

Глядя на эту функцию можно предположить, что здесь будет бесконечный цикл. Ну как бы не выйдет из цикла функция, потому что элемент будет вставлять первый элемент перед первым но после двух остальных и вообщем будет как бы бесконечный цикл. Щас попробуем это смоделировать. Ну что ж вообщем я протестил вот код:

//testirovanie fynkcii duplicate_elements();
#include <iostream>
using std::cout;
using std::endl;
#include <vector>
using std::vector;
#include <string>
using std::string;

void duplicate_elements(vector<string>& f)
{
	for(vector<string>::iterator p=f.begin();p!=f.end();++p)
	f.insert(p,*p);//Не надо!
}

int main()
{
	cout <<"Mu v fynkcii!"<<endl;
	vector<string> vec(3);
	vec[0]="don't";
	vec[1]="do";
	vec[2]="this";
	for(int i=0;i<3;i++)
		cout <<vec[i]<<' ';
	cout <<endl;

	duplicate_elements(vec);//vulazit owibka koroche

	return 0;
}

Короче вылазит ошибка, я даже не пойму что за ошибка. Как бы бесконечного цикла не получилось, просто выкинуло окошко Debug Error! Отакая от фигня. Так вообщем нельзя делать. Да плохо что я даже не понял в чом ошибка, но щас попытаюсь разобраться все таки.

Тока еще потестил и разобрался я так думаю просто недействительный *p оказывается потому, что если я туда добавляю какую нибудь строку, то ошибки не происходит, ошибка то происходит но я присваиваю итератор ей и нету ошибки, а есть зацикливание.

Ладно я думаю разобрались. Так делать нельзя.

rss