【发布时间】:2012-10-28 14:26:28
【问题描述】:
我正在处理一个相当长的程序,但在从向量中删除元素时遇到了困难。我试图用一个非常简单的向量来做到这一点,并且遇到了同样的问题。据我所知,我的做法与每个人在其他人的问题中解释的方式相同。这是简单的代码。
vector<int> vect;
vect.push_back(3);
vect.push_back(2);
cout << vect[1]; // prints '2'
vect.erase(vect.begin()+1);
cout << vect[1] << endl; // prints '2'
我做错了什么?
上面的代码似乎有效,因为我检查了最后的大小,它打印了“1”。真正的代码却没有:
size = A[i]->B().size();
cout << "size is " << A[i]->B().size() << endl; // prints 21
A[i]->B().erase(A[i]->B().begin()+size);
cout << "size now " << A[i]->B().size() << endl; // prints 21
我看不出我做了什么不同的事情? A是一个向量,它存储了其他向量。我想删除 B 向量中的最后一个元素。
【问题讨论】:
-
+1 用于生成一个简单的示例;)
-
你忘了解释你所期望的不同行为!
-
@Sandra 关于您的编辑,
A[i]->B().begin()+size指向最后一个元素之后的一个。因此,该行显示为A[i]->B().erase(A[i]->B().end());,并且没有任何内容被删除。要删除最后一个元素,A[i]->B().pop_back(); -
我已经用我的实际代码编辑了我的问题 - 我希望删除“B”中的最后一个元素。
-
@Praetorian 我把它改成了 begin()+size-1 并且最后一行的尺寸仍然是 21。