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
却在增长。弹出一半元素后,循环条件变为假。
解决方案是使用
while (v1.size()) { … }
或
const int N = v1.size();
for (int i = 0; i < N; ++i) { … }
如您所知。我更喜欢前者。
每次调用 pop_back()
时 size()
returns 的值减 1。
因此,如果您从向量中的两个元素开始并在第一次迭代中调用 pop_back()
,则在第二次迭代中您有 j == 1
和 size() == 1
,因此循环退出不处理第二个元素。
因为您正在更改 for 循环内向量的大小(在 Pop_back()
中),它用于循环的结束条件。也许你应该在 for 循环之前存储大小。
int v1_size = v1.size();
for (int j = 0; j < size; j++) {
假设 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
却在增长。弹出一半元素后,循环条件变为假。
解决方案是使用
while (v1.size()) { … }
或
const int N = v1.size();
for (int i = 0; i < N; ++i) { … }
如您所知。我更喜欢前者。
每次调用 pop_back()
时 size()
returns 的值减 1。
因此,如果您从向量中的两个元素开始并在第一次迭代中调用 pop_back()
,则在第二次迭代中您有 j == 1
和 size() == 1
,因此循环退出不处理第二个元素。
因为您正在更改 for 循环内向量的大小(在 Pop_back()
中),它用于循环的结束条件。也许你应该在 for 循环之前存储大小。
int v1_size = v1.size();
for (int j = 0; j < size; j++) {