c++ string和vector
米兰的小红黑 人气:0知识点1【STL的概述】
STL(Standard Template Library,标准模板库)
STL的三大组件:容器(container)、算法(algorithm)、迭代器(iterator)。
算法操作数据,容器存储数据,迭代器是算法操作容器的桥梁,迭代器和容器一一对应。
STL六大组件:
容器 算法 迭代器 仿函数 适配器 空间配置器
容器:存放数据
算法:操作数据
迭代器:容器和算法的桥梁
仿函数:为算法提供更多的策略
适配器:为算法提供更多的参数接口
空间配置器:管理容器和算法的空间
算法的分类:
质变算法:是指运算过程中会改变区间元素的内容。例如拷贝,替换,删除等。
非质变算法:是指运算过程中不会区间的元素内容,例如查找、计数、遍历、寻找极值。
迭代器的分类:
知识点2【迭代器的案例】
案例:容器vector
#include <iostream> #include <vector> #include<algorithm> void myPrintInt(int num); using namespace std; void test01(){ //单端动态数组vector类模板 vector<int> arr(0); //push_back()尾部插入数据 arr.push_back(100); arr.push_back(200); arr.push_back(300); arr.push_back(400); //访问数据 //定义一个迭代器存储arr的起始迭代器 vector<int>::iterator beginIt = arr.begin(); //定义一个迭代器存储arr的结束迭代器 vector<int>::iterator endIt = arr.end(); //for循环遍历1 for(vector<int>::iterator i = beginIt; i != endIt; i++){ //对迭代器取* 代表的是 容器的元素 //*biginIt cout << *i << " "; } cout << endl; //for循环遍历2(推荐) for(vector<int>::iterator beginIt = arr.begin(); beginIt != arr.end();beginIt++){ cout << *beginIt << " "; } cout << endl; //STL提供的算法来遍历容器(包含算法头文件algorithm) //for_each从容器的起始--->结束,逐个元素取出 //myPrintInt容器数据的打印方式 for_each(arr.begin(),arr.end(),myPrintInt); } void myPrintInt(int num){ cout << num << " "; } int main(int argc, char *argv[]) { test01(); return 0; }
运行结果:
案例2:容器存放自定义数据类型
#include <iostream> #include <vector> #include<algorithm> #include <string.h> using namespace std; class Person{ friend void myPrintInt1(Person &ob); private: string name; int age; public: Person(string name,int age){ this->name = name; this->age = age; } }; void myPrintInt1(Person &ob){ cout << ob.age << " " << ob.name << endl; } void test02(){ vector<Person> arr; Person p1("tom",15); arr.push_back(p1); arr.push_back(Person("davi",16)); arr.push_back(Person("mary",17)); arr.push_back(Person("peter",18)); for_each(arr.begin(),arr.end(),myPrintInt1); } int main(int argc, char *argv[]) { test02(); return 0; }
运行结果:
案例3:容器嵌套容器
void test03(){ vector<int> v1; vector<int> v2; vector<int> v3; v1.push_back(10); v1.push_back(20); v1.push_back(30); v1.push_back(40); v2.push_back(100); v2.push_back(200); v2.push_back(300); v2.push_back(400); v3.push_back(1000); v3.push_back(2000); v3.push_back(3000); v3.push_back(4000); vector< vector<int>> v4; v4.push_back(v1); v4.push_back(v2); v4.push_back(v3); for(vector<vector<int>>::iterator it = v4.begin(); it != v4.end(); it++){ for(vector<int>::iterator mit = (*it).begin(); mit != (*it).end();mit++){ cout << (*mit) << " "; } cout << endl; } }
运行结果:
知识点3【string类】
1、案例:string的构造和赋值
#include <iostream> #include <string.h> using namespace std; /* 3.1.2.1 string 构造函数 string();//创建一个空的字符串 例如: string str; string(const string& str);//使用一个 string 对象初始化另一个 string 对象 string(const char* s);//使用字符串 s 初始化 string(int n, char c);//使用 n 个字符 c 初始化 3.1.2.2 string 基本赋值操作 string& operator=(const char* s);//char*类型字符串 赋值给当前的字符串 string& operator=(const string &s);//把字符串 s 赋给当前的字符串 string& operator=(char c);//字符赋值给当前的字符串 string& assign(const char *s);//把字符串 s 赋给当前的字符串 string& assign(const char *s, int n);//把字符串 s 的前 n 个字符赋给当前的字符串 string& assign(const string &s);//把字符串 s 赋给当前字符串 string& assign(int n, char c);//用 n 个字符 c 赋给当前字符串 string& assign(const string &s, int start, int n);//将 s 从 start 开始 n 个 字符赋值给字符串 */ void test01(){ //string(const char* s);//使用字符串s初始化 string str1 = "hello"; cout << str1 << endl; //string(int n, char c);//使用n个字符c初始化 string str2(10,'H'); cout<<str2<<endl;//"HHHHHHHHHH" } int main(int argc, char *argv[]) { test01(); return 0; }
加载全部内容