PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : insert_vector



mile04
23-02-2005, 10:59
hallo
mein Prog fügt eingie werte in meinem vector mit (vec.insert()).Das Einfügen funzt problemlos. aber bis es an einer bestimmten stelle dann bricht ab.

beim debuggen kommt die Fehlermeldung:
unbehandelte Ausnahme in myProg.exe: 0xC0000005:access violation


#include<iostream>
#include<vector>
#include<iomanip>
using namespace std;

int output();
vector<int> vec;

int input()
{

for( size_t row = 0; row < 12; ++row)
{
vec.resize(row+1);
vec[row]=row;

//std::cout << "\r\n";
}
output();
return 0;
}
int insert()
{
int position=0;
int y=0;
int x_mal=0;
int from =0;
int to =0;

position=10;


std::vector<int>::iterator Iter = vec.begin();

from = 11;
to = 22;
x_mal= 3;
for (int j=0;j<x_mal;++j)
{
vec.insert(Iter + position, from);
vec.insert(Iter + position+1, to);

}
output();

return 0;
}

int output()
{


cout<<"\n\nElemente des Vektors \n";

for( size_t row = 0; row < vec.size(); ++row)
{
cout <<std::setw(5)<<vec[row]<< ' ';

//std::cout << "\r\n";
}
cout << "\r\n";
return 0;
}



int main()
{
input();
insert();
return 0;
}


A propos wenn die for-variable row<11 funzt einwandfrei.
ich glaube hat es mit vec.capacity() zu tun, die am Anfang auf 16 eingestellt.

beim debuggen springt er in : :confused:


// TEMPLATE FUNCTION copy_backward
template<class _BI1, class _BI2> inline
_BI2 copy_backward(_BI1 _F, _BI1 _L, _BI2 _X)
{while (_F != _L)
*--_X = *--_L;
return (_X); }


Vielen Dank für eure Hilfe

wraith
23-02-2005, 11:56
Der iterator-Parameter bei vector::insert muß innerhalb des vectors liegen, oder identisch zu end sein. Wenn dein vector erst 5 Elemente hat, und du bei begin() + 10 einfügen willst, dann gibt das einen Seg-Fault (oder auch nicht, ist eben undefiniert).

Deine erste for-Schleife in input kannst du mit push_back sauberer schreiben.

mile04
24-02-2005, 07:43
hallo
ich habe es hingekriegt
der Iterator war irgendwann nach dem Aufruf von insert() nicht mehr gültig, deswegen statt:
Iter +position ----->vec.begin()+position;

danke