1.迭代器的总结
原生指针其实也是一种迭代器
//原生指针也是迭代器
void test01()
{
int arr[5] = { 1, 2, 3, 4, 5 };int * p = arr;
for (int i = 0; i < 5;i++)
{
//cout << arr[i] << endl;
cout << *(p++) << endl;
}
}int main()
{
test01();
}
1.2迭代器的用法
vector<int>v; //创建一个vector容器,容器中存放元素类型是int类型
//插入元素
v.push_back(10);
v.push_back(30);
v.push_back(20);
v.push_back(40);//遍历元素
vector<int>::iterator itBegin = v.begin(); //v.begin() 起始迭代器,指向容器中第一个数据vector<int>::iterator itEnd = v.end(); //v.end();结束迭代器,指向的是容器中最后一个元素的下一个位置
//第一种遍历
while (itBegin!=itEnd)
{
cout << *itBegin << endl;
itBegin++;}
//第二种遍历
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << endl;
}//第三种便利
void myPrint(int val)
{
cout << val << endl;
}for_each(v.begin(), v.end(), myPrint);
自定义类型迭代器遍历
//自定义数据类型
class Person
{
public:
Person(string name, int age)
{
this->m_Name = name;
this->m_Age = age;
}
string m_Name;
int m_Age;
};//自定义累类型
void test03()
{
vector<Person> v;Person p1("aaa", 10);
Person p2("bbb", 20);
Person p3("ccc", 30);
Person p4("ddd", 40);
Person p5("eee", 50);v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
v.push_back(p4);
v.push_back(p5);//每个容器都有自己专属的迭代器
for (vector<Person>::iterator it = v.begin(); it != v.end();it++)
{
// *it === Person
cout << "姓名: " << (*it).m_Name << " 年龄: " << it->m_Age << endl;
}
}
2.string容器使用介绍
string 构造函数
string();//创建一个空的字符串 例如: string str;
string(const string& str);//使用一个string对象初始化另一个string对象
string(const char* s);//使用字符串s初始化
string(int n, char c);//使用n个字符c初始化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个字符赋值给字符串string插入和删除操作
string& insert(int pos, const char* s); //插入字符串
string& insert(int pos, const string& str); //插入字符串
string& insert(int pos, int n, char c);//在指定位置插入n个字符c
string& erase(int pos, int n = npos);//删除从Pos开始的n个字符string比较操作
compare函数在>时返回 1,<时返回 -1,==时返回 0。
比较区分大小写,比较时参考字典顺序,排越前面的越小。
大写的A比小写的a小。int compare(const string &s) const;//与字符串s比较
int compare(const char *s) const;//与字符串s比较
string子串
string substr(int pos = 0, int n = npos) const;//返回由pos开始的n个字符组成的字符串string查找和替换
int find(const string& str, int pos = 0) const; //查找str第一次出现位置,从pos开始查找
int find(const char* s, int pos = 0) const; //查找s第一次出现位置,从pos开始查找
int find(const char* s, int pos, int n) const; //从pos位置查找s的前n个字符第一次位置
int find(const char c, int pos = 0) const; //查找字符c第一次出现位置
int rfind(const string& str, int pos = npos) const;//查找str最后一次位置,从pos开始查找
int rfind(const char* s, int pos = npos) const;//查找s最后一次出现位置,从pos开始查找
int rfind(const char* s, int pos, int n) const;//从pos查找s的前n个字符最后一次位置
int rfind(const char c, int pos = 0) const; //查找字符c最后一次出现位置
string& replace(int pos, int n, const string& str); //替换从pos开始n个字符为字符串str
string& replace(int pos, int n, const char* s); //替换从pos开始的n个字符为字符串sstring拼接操作
string& operator+=(const string& str);//重载+=操作符
string& operator+=(const char* str);//重载+=操作符
string& operator+=(const char c);//重载+=操作符
string& append(const char *s);//把字符串s连接到当前字符串结尾
string& append(const char *s, int n);//把字符串s的前n个字符连接到当前字符串结尾
string& append(const string &s);//同operator+=()
string& append(const string &s, int pos, int n);//把字符串s中从pos开始的n个字符连接到当前字符串结尾
string& append(int n, char c);//在当前字符串结尾添加n个字符c
2.1代码例子
void test01()
{
string str;
string str2(str);string str3 = "abc";
string str4(10, 'a');
cout << "str3 = " << str3 << endl;
cout << "str4 = " << str4 << endl;
}
//赋值
void test02()
{
string str;
str = "abc";str.assign("abcde", 3);
cout << str << endl;
string str2;
str2.assign(str);
cout << str2 << endl;//string& assign(const string &s, int start, int n);//将s从start开始n个字符赋值给字符串
str2.assign(str, 0, 2);
cout << str2 << endl;}
void test03()
{
string str = "hello world";//for (int i = 0; i < str.size();i++)
//{
// //cout << str[i] << endl;
// cout << str.at(i) << endl;
//}//[]和at区别,[]访问越界 直接挂掉 , at访问越界 抛出out_of_range异常
try
{
//cout << str[100] << endl;
cout << str.at(100) << endl;
}
catch (out_of_range & e)
{
cout << e.what() << endl;
}
catch (...)
{
cout << "异常捕获" << endl;
}}
void test04()
{
//拼接
//string str1 = "我";
//string str2 = "爱北京";//str1 += str2;
//cout << str1 << endl;//str1.append("天安门");
//cout << str1 << endl;//查找
string str = "abcdefgde";int pos = str.find("de");
//rfind 是从右往左查找
if (pos == -1)
{
cout << "未找到字符串" << endl;
}
else
{
cout << "找到了字符串,位置为: " << pos << endl;
}
//替换
//string& replace(int pos, int n, const string& str); //替换从pos开始n个字符为字符串str
str.replace(1, 3, "11111");
//a11111efgde
cout << str << endl