cpp中vector动态数组(一种container)的简单用法
vector<int> num; for (int i=0; i<10; ++i)num.push_back(i); num.push_back(10); num.push_back(10); cout << "Original array:\n"; //vector<int>::iterator it; //C++11之前用的,11之后可以用auto for (auto it=num.begin(); it!=num.end(); ++it) { cout << *it << " "; } cout << endl; num.insert(num.begin()+2,3,10); //在num[2]之前加3个10 cout << "Inserted array:\n"; for (auto it=num.begin(); it!=num.end(); ++it) { cout << *it << " "; } cout << endl; //delete 10 for (auto it=num.begin(); it!=num.end(); ++it) { if ( *it == 10 ) { num.erase(it); //删除it指向的元素,后it自动指向下一个元素;所以不用移动it了,为了中和 ++it,才有 --it --it; } } // num.erase(remove(num.begin(),num.end(),10),num.end());//这句可以代替上面的整个for循环 cout << "Deleted 10 array:\n"; for (auto it=num.begin(); it!=num.end(); ++it) { cout << *it << " "; }
for (auto it=num.begin(); it!=num.end(); ++it) { if ( *it == 10 ) { num.erase(it); //删除it指向的元素后,it自动指向下一个元素;所以不用移动it了,为了中和 ++it,才有 --it --it; } } 或者 for (auto it=num.begin(); it!=num.end();) { if ( *it == 10 ) num.erase(it); else ++it; } 或者 num.erase(remove(num.begin(),num.end(),10),num.end());//这句可以代替上面的整个for循环
运行结果:
注意:在VS2013中,以下代码会出错
//delete 10 for (auto it = num.begin(); it != num.end(); ++it) { if (*it == 10) { num.erase(it); // --it; // VS2013这会有问题,应该是erase导致的it无效,但使用MinGW g++编译(C++ 11标准)是可以的。 } } ////// vs2013 下,要这样写 //// for (auto it = num.begin(); it != num.end(); ++it) { if (*it == 10) { it = num.erase(it); // --it; } } 或 for (auto it = num.begin(); it != num.end(); ) { if (*it == 10) { it = num.erase(it); } else ++it; }
VS2013出现的错误:vector iterator not decrementable。 或者,vector iterators incompatible
成员函数 insert() 用来插入元素:返回 iterator 指向新插入元素的头
用erase() 来删除某一位置元素,返回 iterator 指向被删除的元素的尾。
C++98声明:
iterator erase (iterator position); iterator erase (iterator first, iterator last);
C++11声明:
iterator erase (const_iterator position); iterator erase (const_iterator first, const_iterator last);
Removes from the vector either a single element (position) or a range of elements ([first,last)).
而pop_back() 是表示弹出最后一个元素,无参数,无返回值。
- vector 的迭代器
或者:
常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。
昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。