Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在运行时C++;。抛出运行时错误_C++_String_Vector_Iterator - Fatal编程技术网

C++ 在运行时C++;。抛出运行时错误

C++ 在运行时C++;。抛出运行时错误,c++,string,vector,iterator,C++,String,Vector,Iterator,我想在运行时将一些元素插入向量中。 我来了 其目的是打印“你好,我是拉斯米” intmain() { 向量向量; 向量推回(“你好”); 向量推回(“Hi”); 向量推回(“拉斯米”); for(vect::iterator it=vect.begin();it!=vect.end();++it) { if(*it==“Rasmi”)//如果遇到“Rasmi” {它--; 向量插入(向量开始+2,“我是”); } coutvect.insert(vect.begin()+2,“我是”); } c

我想在运行时将一些元素插入向量中。 我来了

其目的是打印“你好,我是拉斯米”

intmain()
{
向量向量;
向量推回(“你好”);
向量推回(“Hi”);
向量推回(“拉斯米”);
for(vect::iterator it=vect.begin();it!=vect.end();++it)
{
if(*it==“Rasmi”)//如果遇到“Rasmi”
{它--;
向量插入(向量开始+2,“我是”);
}
cout
vect.insert(vect.begin()+2,“我是”);
}
cout
vect.insert(vect.begin()+2,“我是”);
}

cout虽然我真的不知道你为什么要做这样的事情,但有一个安全的解决办法。您可以存储迭代器的当前索引,将新元素插入向量,然后重新分配迭代器以引用潜在的新内存地址。我在这里包含了这样做的代码

if(*it == "Rasmi") // If it encounters "Rasmi"
{
    it--;
    int index = it - vect.begin (); // store index of where we are
    vect.insert(vect.begin()+2, "I am");
    it = vect.begin () + index; // vect.begin () now refers to "new" begin
    // we set it to be equal to where we would want it to be
}
cout << *it;
if(*it==“Rasmi”)//如果遇到“Rasmi”
{
它--;
int index=it-vect.begin();//存储我们所在位置的索引
向量插入(向量开始+2,“我是”);
it=vect.begin()+index;//vect.begin()现在指的是“新的”begin
//我们将其设置为与我们希望的位置相等
}

cout虽然我真的不知道你为什么要做这样的事情,但有一个安全的解决办法。您可以存储迭代器的当前索引,将新元素插入向量,然后重新分配迭代器以引用潜在的新内存地址。我在这里包含了这样做的代码

if(*it == "Rasmi") // If it encounters "Rasmi"
{
    it--;
    int index = it - vect.begin (); // store index of where we are
    vect.insert(vect.begin()+2, "I am");
    it = vect.begin () + index; // vect.begin () now refers to "new" begin
    // we set it to be equal to where we would want it to be
}
cout << *it;
if(*it==“Rasmi”)//如果遇到“Rasmi”
{
它--;
int index=it-vect.begin();//存储我们所在位置的索引
向量插入(向量开始+2,“我是”);
it=vect.begin()+index;//vect.begin()现在指的是“新的”begin
//我们将其设置为与我们希望的位置相等
}

cout只要std::vector::insert()的一个重载具有签名,您就可以按如下方式重写代码

for(vect<string>::iterator it = vect.begin(); it != vect.end();)
{

    if(*it == "Rasmi") // If it encounters "Rasmi"
    { 
        it = vect.insert(it, "I am");          
        cout << *it; 
        ++it;
    }
    cout << *it;

    ++it;
}
for(vect::iterator it=vect.begin();it!=vect.end();)
{
if(*it==“Rasmi”)//如果遇到“Rasmi”
{ 
它=向量插入(它是“我”);

cout只要std::vector::insert()的一个重载具有签名,您就可以按如下方式重写代码

for(vect<string>::iterator it = vect.begin(); it != vect.end();)
{

    if(*it == "Rasmi") // If it encounters "Rasmi"
    { 
        it = vect.insert(it, "I am");          
        cout << *it; 
        ++it;
    }
    cout << *it;

    ++it;
}
for(vect::iterator it=vect.begin();it!=vect.end();)
{
if(*it==“Rasmi”)//如果遇到“Rasmi”
{ 
它=向量插入(它是“我”);

cout如果您只在数组中查找字符串的一个实例,则通常更容易使用
it=std::find(vect.begin(),vect.end(),“Rasmi”)
如果您只在数组中查找字符串的一个实例,则通常更容易使用
it=std::find(vect.begin(),vect.end(),“Rasmi”)
我对你的答案投了赞成票,但最后一句话听起来好像是开发人员有责任正确调整向量的大小。只有在向量被调整大小或分配时,位于插入点之前的迭代器才会无效。也许这就是你的意思,但听起来你好像在说每次调用
insert
或者
push_back
使每个迭代器无效。@ZdeslavVojkovic这是真的,我的措词很糟糕。@BenjaminLindley好吧,从技术上讲,你应该把每个可变操作都视为无效。@BenjaminLindley我宁愿每次都检查新的和旧的大小。我对你的答案投了赞成票,但最后一句话听起来像是r开发人员正确调整向量大小的责任。只有当向量被调整大小或分配时,位于插入点之前的迭代器才会无效。也许这就是你的意思,但听起来好像你说每次调用
insert
push_back
都会使每个迭代器无效。@ZdeslavVojkovic tha这是真的,我的措辞很糟糕。@BenjaminLindley好吧,从技术上讲,你应该将每个可变操作视为无效。@BenjaminLindley我宁愿确定,而不是每次都检查新的和旧的大小。