for循环仅打印一半的值(使用向量)
for loop only printing half the values (working with vectors)
假设pop_back值的main中的for循环只打印数组中一半的值。但是,当我写入(i<=user)时,它会打印所有值。
MyVector.h
template<class T>
T MyVector<T>::Pop_back( ){
return elements_ptr[--vectorSize];
}
main.cpp
int main()
{
MyVector<int> v1;
int user = 500;
for(int i= 1; i <= user; i++){
v1.Push_back(i);
}
cout << v1.size() << endl; // outputs 500
for (int j = 0; j < v1.size(); j++){
cout << v1.Pop_back() << " ";
if( j % 20 ==0 ){
cout << endl;
}
}
return 0;
}
问题就在这里:
for (int j = 0; j < v1.size(); j++) { … }
当你继续从向量中弹出元素时,它报告的size()
越来越小,而j
却在增长。弹出一半元素后,循环条件将变为false。
解决方案是使用
while (v1.size()) { … }
或
const int N = v1.size();
for (int i = 0; i < N; ++i) { … }
正如你已经发现的那样。我更喜欢前者。
每次调用pop_back()
时,size()
返回的值都会减少1。
因此,如果您从向量中的两个元素开始,并在第一次迭代中调用pop_back()
,那么在第二次迭代中,您将获得j == 1
和size() == 1
,因此循环在不处理第二个元素的情况下退出。
因为您正在更改for循环内向量的大小(以Pop_back()
为单位),该向量用于循环的结束条件。也许你应该在for循环之前存储尺寸。
int v1_size = v1.size();
for (int j = 0; j < size; j++) {
相关文章:
- C++:如何循环通过向量中的整数元素
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 基于范围的 for 循环:迭代使用一个元素扩展的向量
- <string> 使用 for 循环写入向量
- C++ 制作/命名不初始化的向量(在 while 循环中)
- C++ - 使用基于范围的 for 循环将字符值分配给向量中的字符串不会分配值
- 为什么即使使用 for 循环遍历我的向量,它也没有输出到控制台?(C++)
- 布尔值向量的基于范围 for 循环
- C++用于循环跳过向量的元素?
- 修改向量中的字符串?(不使用循环)
- 从列表/向量制作嵌套 for 循环的最佳方法是什么?
- 特征获取索引数组,其中向量中的值为真(不需要循环)
- C++ 继承向量问题(无限循环+在其他类中使用向量的问题)
- 向量循环抛出2个错误
- 使用向量循环时,是否有错误
- EXC_BAD_INSTRUCTION对于C++中的向量循环为反向
- 向量循环的启动值
- 通过列表向量循环
- 使用指针向量循环其他向量
- 在自包含向量循环中删除时"矢量迭代器不兼容"