首页 > 代码库 > vector 进阶
vector 进阶
http://classfoo.com/ccby/article/jnevK
#include <iostream>#include <vector>#include <algorithm> // sort, max_element, random_shuffle, remove_if, lower_bound #include <functional> // greater, bind2nd// 用在此处是为了方便简洁, 在实际编程中慎用using namespace std;int main(){ int arr[4] = { 1, 2, 3, 4 }; // 用上述数组初始化向量 vector<int> foo(arr, arr + 4); // 插入更多的元素 foo.push_back(5); foo.push_back(6); foo.push_back(7); foo.push_back(8); // 此时的向量内容为 {1, 2, 3, 4, 5, 6, 7, 8} // 随机移动元素 random_shuffle(foo.begin(), foo.end()); // 定位最大的元素, O(n) vector<int>::const_iterator largest = max_element(foo.begin(), foo.end()); cout << "当前最大元素是: " << *largest << "\n"; cout << "它的索引位置是: " << largest - foo.begin() << "\n"; // 排序元素 sort(foo.begin(), foo.end()); // 用二分查找法找出向量中值为5的元素 vector<int>::const_iterator five = lower_bound(foo.begin(), foo.end(), 5); cout << "值为5的元素的索引位置是: " << five - foo.begin() << "\n"; // 删除所有值大于4的元素 foo.erase(remove_if(foo.begin(), foo.end(), bind2nd(greater<int>(), 4)), foo.end()); // 打印所有剩余元素的值 for (vector<int>::const_iterator it = foo.begin(); it != foo.end(); ++it) { cout << *it << " "; } cout << "\n"; return 0;}
对象
#include <iostream>#include <vector>#include <string>#include <algorithm>#include <functional>#include <sstream>namespace ClassFoo{ using namespace std; class Person { private: std::string name; static int n; public: Person() { std::stringstream ss; std::string snum; ss << n++; ss >> snum; name = "foo" + snum; } void print() const { std::cout << name << std::endl; } void printWithPrefix(std::string prefix) const { std::cout << prefix << name << std::endl; } }; int Person::n = 0; void foo(const std::vector<Person>& coll) { // 对每个元素对象调用成员函数 print() for_each(coll.begin(), coll.end(), mem_fun_ref(&Person::print)); // 对每个元素对象调用成员函数 printWithPrefix() // - "person: " 作为参数传递给成员函数 for_each(coll.begin(), coll.end(), bind2nd(mem_fun_ref(&Person::printWithPrefix), "person: ")); } void ptrfoo(const std::vector<Person*>& coll) { // 对每个指针指向的元素对象调用成员函数 print() for_each(coll.begin(), coll.end(), mem_fun(&Person::print)); // 对每个指针指向的元素对象调用成员函数 printWithPrefix() // - "person: " 作为参数传递给成员函数 for_each(coll.begin(), coll.end(), bind2nd(mem_fun(&Person::printWithPrefix), "person: ")); }}int main(){ std::cout << "当向量的元素是对象时:" << std::endl; std::vector<ClassFoo::Person> coll(5); ClassFoo::foo(coll); std::cout << "当向量的元素是指向对象的指针时:" << std::endl; std::vector<ClassFoo::Person*> coll2; coll2.push_back(new ClassFoo::Person); coll2.push_back(new ClassFoo::Person); coll2.push_back(new ClassFoo::Person); coll2.push_back(new ClassFoo::Person); coll2.push_back(new ClassFoo::Person); ClassFoo::ptrfoo(coll2);}
vector 进阶
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。