C++ 标准库函数的begin和end函数与标准库容器的begin和end成员

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/misayaaaaa/article/details/65635042

如果你手边有C++Primer,这两点分别在P106、P298,不想翻书的话,就好好看看这篇文章吧,书上有更多的细节,有时间还是多翻书吧!


标准库的begin()和end()函数是C++11新标准引入的函数,可以对数组类型进行操作,返回其首尾指针,对标准库容器操作,返回相应迭代器。

标准库容器的begin()和end()成员函数属于对应类的成员,返回的是对象容器的首尾迭代器。


新标准库的begin()和end()函数可以让我们更容易的获取数组的首尾指针(注意尾指针是最后一个元素的下一个地址)


用一个最简单的冒泡排序作为例子:

/***************************************************************************
 *  @file       main.cpp
 *  @author     MISAYAONE
 *  @date       24  March 2017
 *  @remark     24  March 2017 
 *  @theme      Bubble Sort 
 ***************************************************************************/

#include <iostream>
#include <vector>
using namespace std;

//传入首尾指针
void Bubble_sort(int *begin, int *end)
{
	for (auto p1 = begin; p1 != end; ++p1)
	{
		for (auto p2 = begin; p2 != end-1; ++p2)
		{
			if (*p2 > *(p2+1))
			{
				int val_temp = *p2;
				*p2 = *(p2+1);
				*(p2+1) = val_temp;
			}
		}
	}
}

//对函数进行重载,传入一对迭代器,同时进行第一次改进
void Bubble_sort(vector<int>::iterator begin, vector<int>::iterator end)
{
	int flag= 0;
	for (auto p1 = begin; p1 != end; ++p1)
	{
		flag = 0;
		for (auto p2 = begin; p2 != end-1; ++p2)
		{
			if (*p2 > *(p2+1))
			{
				int val_temp = *p2;
				*p2 = *(p2+1);
				*(p2+1) = val_temp;
				flag = 1;//表示此轮循环进行了交换				
			}
		}
		if (flag == 0)//上一轮循环中未进行交换,直接跳出
		{
			break;
		}
	}
}

int main(int argc,char** argv)
{
	int a[10] = {1,5,8,7,9,6,4,3,2,0};
	vector<int> vec(a,a+10);
	Bubble_sort(begin(a),end(a));//标准库的begin()和end()函数
	cout<<"内置数组冒泡排序后:";
	for (int i = 0; i < 10; ++i)
	{
		cout<<a[i]<<" ";
	}

	Bubble_sort(vec.begin(),vec.end());//标准库容器的begin()和end()成员函数
	cout<<endl;
	cout<<"vector冒泡排序后:";
	for (int i = 0; i < 10; ++i)
	{
		cout<<vec[i]<<" ";
	}

	cin.get();
	return 0;
}




阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页