/*C++教程网笔记,感谢Mr.J老师*/
标准库类型
string 字符串 char*
vector 动态数组 静态数组[]
map key/value 内部是以树的形式存储的。
1)string介绍
2)string 对象的定义和初始化
3)常用成员函数
/*********************************/
4)vector介绍
5)vector对象初始化
6)vector常用成员函数
/***********************************/
7)map介绍
8)插入数据
9)查找与修改
10)删除
1)string介绍(标准库string类型)
string类型支持长度可变的字符串,C++标准库将负责管理与存储字符相关的内存,以及提供各种有用的操作。
typedef basic_string<char>string;
typedef basic_string<wchar_t> wstring;
要使用string类型对象,必须包含相关头文件
#include <string>
using std::string;
/*string对象的定义和初始化*/
string s1; //默认构造函数,s1为空串
string s2(s1); //将s2初始化为s1的一个副本
string s3("value");//将s3初始化为一个字符串字面值副本
string s4(n,'c'); //将s4初始化为字符‘c’的n个副本
#include <string>
#include <iostream>
using namespace std;
int main(void)
{
string s1;
string s2("abc");
cout << s2 << endl;
basic_string<char> s3("xxx"); //等价于string s3("xxx");
cout << s3 << endl;
string s4("abcdefg",4);
cout << s4 << endl;
string s5(s2,2,3);
cout << s5 << endl;
string::iterator first = s2.begin() + 1;
string::iterator last = s2.begin() + 3;
string s6(first, last); // [first,last)
cout << s6 << endl;
return 0;
}
/*
输出结果:
abc
xxx
abcd
c
bc
*/
3)常用成员函数
#include <string>
#include <iostream>
using namespace std;
int main(void)
{
/*
* string STL类函数的使用
*/
string s1("abcd");
cout << s1.size() << endl; // 字符串大小 4
cout << s1.length() << endl; // 字符串大小 4
cout << s1.empty() << endl; // 非空0
cout << s1.substr(1,2) << endl; //取字串 bc
cout << s1.substr(1) << endl; //参数:开始索引,结束索引(默认-1).
string::size_type pos = s1.find("c",1);//参数:需要查找的字符,开始查找的位置。
if (pos == string::npos)
{
cout << "not found " << endl;
}
else
{
cout << "pos = " << pos << endl;
}
return 0;
}
/*输出结果2:
4
4
0
bc
bcd
pos = 2
*/
4)vector介绍
vector是同一种类型的对象的集合
vector的数据结构很像数组(元素存储空间是连续的,空间又是可以扩展的),能非常高效和方便地访问单个元素。
vector是一个类模板(class template)
要使用vector必须包含相关头文件
#include <vector>
using std::vector;
vector类定义了好几种构造函数
vector<T> v1; //vector保存类型为T的对象。默认构造函数v1为空
vector<T> v2(v1); //v2是v1的一个副本
vector<T> v3(n,i); //v3包含n个值为i的元素
vector<T> v4(n); //v4含有值初始化的元素的n个副本
5)vector对象初始化
6)vector常用成员函数
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
typedef vector<int> INTVEC;
//void ShowVec(const INTVEC& v) //打印vector
//{
// for (size_t i = 0; i < v.size(); i++) //size函数返回vector的元素的个数
// {
// cout << v[i] << " ";
// }
// cout << endl;
//
//}
void ShowVec(const INTVEC& v) //通过迭代器实现vector打印,vector可以看成容器,string也是容器,迭代器可以看成是泛型程序指针,如vector<int> 看成int*.
{
INTVEC::const_iterator it;
for (it = v.begin(); it != v.end(); ++it)
{
cout << *it << " ";
}
cout << endl;
}
int main(void)
{
INTVEC v;
v.push_back(1);//puch_back函数在末尾添加元素
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
v.push_back(3);
//cout << v.back() << endl; //back()取出最后一个元素
//v.pop_back(); //pop_back()弹出最后一个元素
ShowVec(v);
//v.erase(v.begin() + 2); //erase()移除元素。
//v.erase(v.begin(),v.begin()+2);//移除一段元素
v.erase(remove(v.begin(),v.end(),3),v.end());//移除值为3的元素
ShowVec(v);
return 0;
}
7)map介绍(标准库的map类型,关联式容器,key value )
使用map得包含map类所在得头文件
#include<map>
定义一个map对象:
map<string,int> mapTest; //用string作为索引,存储int对象。
#include <map>
#include <string>
#include <iostream>
using namespace std;
int main(void)
{
//定义map对象
map<string, int> mapTest; //map<key,value>
//插入数据的四种方法
//插入到map容器内部的元素默认是按照key从小到大来排序的。
mapTest["aaa"] = 100; //int& operator[](const string& index); //用运算符重载实现
mapTest.insert(map<string, int>::value_type("bbb", 200));
mapTest.insert(pair<string,int>("ddd",400));
mapTest.insert(make_pair<string,int>("ccc",300));
//打印map
map<string, int>::const_iterator it;
for (it = mapTest.begin(); it != mapTest.end(); ++it)
{
cout << it->first << " " << it->second << endl;
}
return 0;
}
map的查找与修改
#include <map>
#include <string>
#include <iostream>
using namespace std;
int main(void)
{
//定义map对象
map<string, int> mapTest; //map<key,value>
//插入数据的四种方法
//插入到map容器内部的元素默认是按照key从小到大来排序的。
mapTest["aaa"] = 100; //int& operator[](const string& index); //用运算符重载实现
mapTest.insert(map<string, int>::value_type("bbb", 200));
mapTest.insert(pair<string, int>("ddd", 400));
mapTest.insert(make_pair<string, int>("ccc", 300));
//删除map
mapTest.erase("bbb");
map<string, int>::const_iterator it;
it = mapTest.find("ccc");
if (it != mapTest.end())
{
mapTest.erase(it);
}
打印map
//map<string, int>::const_iterator it;
for (it = mapTest.begin(); it != mapTest.end(); ++it)
{
cout << it->first << " " << it->second << endl;
}
return 0;
}