1.STL:标准模板库
1.STL有六大组件
1.容器(序列容器和关联容器)
2.迭代器
3.算法(algorithm)
4.空间配置器
5.配接器
6.仿函数
2.vector容器
1.vector(int) vec
vec是一个容器对象,相当于int arr[];
vector(int) vec(10) 相当于 int arr[10];
2.遍历vec中元素的方法
1.迭代器
int main()
{
vector(int) vec(10);
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
vec.push_back(5);
vector(int)::iterator vec_ite = vec.begin();
while(vec_ite != vec.end())
{
cout << *vec_ite << endl;
vec_ite++;
}
system("pause");
return 0;
}
2.下标
int main()
{
vector(int) vec(10);
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
vec.push_back(5);
for(int i=0; i<10; i++)
{
cout << vec[i] << endl;
}
system("pause");
return 0;
}
3.algorithm中的for_each
void ShowVec(int a)
{
cout << a << " ";
}
int main()
{
vector(int) vec(10);
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
vec.push_back(5);
::for_each(vec.begin(), vec.end(), &ShowVec);
system("pause");
return 0;
}
3.vec.size()与vec.capacity()
1.vec.size()是其元素所占用空间大小,vec.capacity()是其所拥有的空间大小;
2.当分配的内存不够时,重新分配的大小为原来空间的1.5倍。
4.vec.begin()与vec.front()、vec.back()
vec.begin()返回的是指针 p,vec.front()和vec.back()返回的是值 *p。
5.vec.clear()
清空的是vec中的内容,所占内存还存在,当其生命周期结束时彻底删除。
3.algorithm中的函数
1.将vec(10)中的元素随机排列
使用algorithm中的random_shuffle(vec.begin(), vec.end()),该函数传入的参数是想要随机的区域(从哪到哪),要想真正随机,需要在使用该函数之前添加随机数种子,srand((unsigned int)time(0))。
2.将vec(10)中的随即元素排好序
传入的参数仍是需要排序的区域,可以传入排序的规则(函数指针)。
3.获得倒序
::reverse(vec.begin(), vec.end());
4.获得其中元素的计数
::count(vec.begin(), vec.end(), 1):获得vec中1的个数。
=========================================================================================
看视频的补充
对于list
1.lst.remove(value):删除lst中所有的value值。
2.lst.unique():删除连续相同的,只留下一个。
3.lst.splice(itePos, lst2):在lst的itePos位置插入整个lst2链表,插入之后第二个链表为空。
void ShowLst(int a)
{
cout << a << " ";
}
int main()
{
list<int> lst;
lst.push_back(1);
lst.push_back(2);
lst.push_back(3);
lst.push_back(4);
lst.push_back(5);
list<int> lst2;
lst2.push_back(11);
lst2.push_back(12);
lst2.push_back(13);
lst2.push_back(14);
lst2.push_back(15);
list<int>::iterator itePos = find(lst.begin(), lst.end(), 5);
lst.splice(itePos, lst2);
::for_each(lst.begin(), lst.end(), &ShowLst);
cout << "=========================================" << endl;
::for_each(lst.begin(), lst.end(), &ShowLst);
cout << "=========================================" << endl;
system("pause");
return 0;
}
4.lst.splice(itePos, lst2, firstPos):在lst的itePos位置插入lst2链表的firstPos标记的元素。
void ShowLst(int a)
{
cout << a << " ";
}
int main()
{
list<int> lst;
lst.push_back(1);
lst.push_back(2);
lst.push_back(3);
lst.push_back(4);
lst.push_back(5);
list<int> lst2;
lst2.push_back(11);
lst2.push_back(12);
lst2.push_back(13);
lst2.push_back(14);
lst2.push_back(15);
list<int>::iterator itePos = find(lst.begin(), lst.end(), 5);
list<int>::iterator firstItePos = find(lst2.begin(), lst2.end(), 12);
lst.splice(itePos, lst2, firstItePos);
::for_each(lst.begin(), lst.end(), &ShowLst);
cout << "=========================================" << endl;
::for_each(lst2.begin(), lst2.end(), &ShowLst);
cout << "=========================================" << endl;
system("pause");
return 0;
}
5.lst.splece(itePos, lst2, firstPos, lastPos):在lst的itePos位置插入lst2链表从firstPos到lastPos这一段。
void ShowLst(int a)
{
cout << a << " ";
}
int main()
{
list<int> lst;
lst.push_back(1);
lst.push_back(2);
lst.push_back(3);
lst.push_back(4);
lst.push_back(5);
list<int> lst2;
lst2.push_back(11);
lst2.push_back(12);
lst2.push_back(13);
lst2.push_back(14);
lst2.push_back(15);
list<int>::iterator itePos = find(lst.begin(), lst.end(), 5);
list<int>::iterator firstItePos = find(lst2.begin(), lst2.end(), 12);
list<int>::iterator endItePos = find(lst2.begin(), lst2.end(), 14);
lst.splice(itePos, lst2, firstItePos, endItePos);
::for_each(lst.begin(), lst.end(), &ShowLst);
cout << "=========================================" << endl;
::for_each(lst2.begin(), lst2.end(), &ShowLst);
cout << "=========================================" << endl;
system("pause");
return 0;
}
6.lst.sort()是与lst.merge()
lst.sort()是将乱序的lst进行排序;
lst…merge()是将两个顺序的lst进行合并。
void ShowLst(int a)
{
cout << a << " ";
}
int main()
{
list<int> lst;
lst.push_back(1);
lst.push_back(2);
lst.push_back(3);
lst.push_back(4);
lst.push_back(5);
list<int> lst2;
lst2.push_back(11);
lst2.push_back(12);
lst2.push_back(13);
lst2.push_back(14);
lst2.push_back(15);
lst.merge(lst2);
::for_each(lst.begin(), lst.end(), &ShowLst);
cout << "=========================================" << endl;
system("pause");
return 0;
}
8.list和vector分别在什么时候使用
list当程序中一直在进行动态的添加删除元素的时候使用效率更高;
vector当知道程序大小时使用效率更高。