STL---vector
#include<iostream> #include<vector> using namespace std; struct STU { int a; }; int main() { vector<int> vec1; //vector 中的结构可以是C C++所有的基础类型 vector<char> vec2; //这样相当于一个简化版的string类型 vector<STU> vec3; //也可以是自定义结构 //构造函数 vector<int> vec4(5); for (int i = 0; i < 5; i++) { cout << vec4[i] << endl;//都是0 } cout << "*************************************************\n"; vector<int> vec5(5, 9);//用5个9来初始化这个vector for (int i = 0; i < 5; i++) { cout << vec5[i] << endl; } cout << "*************************************************\n"; vector<int> vec6(vec5);//用另一个vector来进行初始化 for (int i = 0; i < 5; i++) { cout << vec6[i] << endl; } cout << "*************************************************\n"; vector<int>::iterator ite1 = vec6.begin(); vector<int>::iterator ite2 = vec6.end(); vector<int> vec7(ite1, ite2); //用迭代器进行初始化 for (int i = 0; i < 5; i++) { cout << vec7[i] << endl; } cout << "*************************************************\n"; return 0; }
#include<iostream> #include<vector> using namespace std; int main() { //Visual Studio2005定义对象的时候初始化几个,那么容量就是几,不同的编译器可能不一样 vector<int> vec1; cout <<"vec1的容量:"<< vec1.capacity() << endl; vector<int> vec2(5); cout << "vec2的容量:" << vec2.capacity() << endl; //容量不够时增加现有容量的一半。比如现有10个,新的就是15个,现有13个;增加13/2==6个,就是19个,不同的编译器可能导致结果不一样 vector<int> vec3(10); vec3.push_back(9); cout << "vec3的容量:" << vec3.capacity() << endl; vector<int> vec4(13); vec4.push_back(9); cout << "vec4的容量:" << vec4.capacity() << endl; cout << "*******************************************************8\n"; vector<int> vec5(5); vec5[3] = 9; cout <<"vec5改变前的容量:"<< vec5.capacity() << endl; vec5.reserve(10); cout << "vec5改变后的容量:" << vec5.capacity() << endl; //cout << vec5[5] << endl; //这条语句是错误的因为,vec5里面现在只有5个元素 //reserve() 方法可以改变vector的容量,但是不能改变vector里面元素的个数 cout <<"vec5内的元素的个数(使用resize前):"<< vec5.size() << endl; vec5.resize(10); //这个方法可以改变vector数组的元素个数 cout << "vec5内的元素的个数(使用resize后):" << vec5.size(); //这个里面需要注意不要混淆capacity和size的含义 cout << endl; cout << "*******************************************************8\n"; //empty方法,size不为0就返回1,size为0就返回0 vector<int> vec6; cout << vec6.empty() << endl; vector<int> vec7(5); cout << vec7.empty() << endl; return 0; }
#include<iostream> #include<vector> #include<algorithm> #include<functional> using namespace std; void func(int n) { cout << n << " "; } int main() { vector<int> vec1; for (int i = 0; i < 10; i++) { vec1.push_back(i); } cout << vec1.at(0) << endl;//at的用法 cout << vec1[1] << endl; //at和[]都是下标运算 cout << vec1.back() << endl;//返回最后一个元素 //使用迭代器进行循环遍历 vector<int>::iterator ite = vec1.begin(); for (; ite != vec1.end(); ite++) { cout << *ite << " "; } cout << endl; //使用for_each进行循环遍历 for_each(vec1.begin(), vec1.end(), func); cout << endl; //添加元素 vec1.push_back(10); //尾部添加 vec1.insert(vec1.begin()+2, 999); //中间插入元素 vector<int> vec2(5, 888); vec1.insert(vec1.begin(), vec2.begin(), vec2.begin() + 3); //用另一个vector的进行插入 for_each(vec1.begin(), vec1.end(), func); cout << endl; //删除元素 vec1.pop_back(); //删除尾部元素 for_each(vec1.begin(), vec1.end(), func); cout << endl; vec1.erase(vec1.begin()); //使用erase方法删除一个指定元素 for_each(vec1.begin(), vec1.end(), func); cout << endl; vec1.erase(vec1.begin(), vec1.begin() + 2); //使用erase方法删除一段指定元素 for_each(vec1.begin(), vec1.end(), func); cout << endl; //交换 cout << "交换前的vec1:"; for_each(vec1.begin(), vec1.end(), func); cout << endl; cout << "交换前的vec2:"; for_each(vec2.begin(), vec2.end(), func); cout << endl; vec2.swap(vec1); cout << "交换后的vec1:"; for_each(vec1.begin(), vec1.end(), func); cout << endl; cout << "交换后的vec2:"; for_each(vec2.begin(), vec2.end(), func); cout << endl; //运算符的重载 cout << (vec1 > vec2) << endl; //比较的方法和字符串的比较是一样的,用的少,了解一下就好了 //排序算法 sort(vec2.begin(), vec2.end()); //也可以改变迭代器使得只是排序中间的一部份 默认从小到大排序 for_each(vec2.begin(), vec2.end(), func); cout << endl; sort(vec2.begin()+2, vec2.end(),greater<int>()); //加入第三个反函数参数就可以使得从小到大排序 for_each(vec2.begin(), vec2.end(), func); cout << endl; return 0; }
#include<iostream> #include<vector> #include<ctime> #include<algorithm> using namespace std; int main() { vector<int> vec1(5, 1); vector<int> vec2(6, 2); vec1.assign(vec2.begin()+1, vec2.end()); //首先清空原来的所有元素,然后重新进行赋值 vec1.assign(9, 9); //assign的另一种使用方法 vec1.clear(); //清空整个vector //打乱vector中的顺序 vector<int> vec3; for (int i = 0; i < 10; i++) { vec3.push_back(i); } srand(unsigned int(time(0))); //设置时间种子 random_shuffle(vec3.begin(), vec3.end()); //乱序算法 for (int i = 0; i < vec3.size(); i++) { cout << vec3[i] << " "; } cout << endl; }