一,边界检查

operator[] 不做边界检查,程序会直接退出。

	try
	{
		vecInt[3] = 5;
	}
	catch (const std::exception&e)
	{
		cerr <<"error:"<< e.what() << endl;
	}

运行以上代码,程序会终止:

关于vector的 operator[]、at()与迭代器访问

 

at()会做边界检查,可以用try catch捕获异常,程序可以不直接退出。

vector<int> vecInt(2, 1);

	try
	{
		vecInt.at(3) = 5;
	}
	catch (const std::exception&e)
	{
		cerr <<"error:"<< e.what() << endl;
	}

运行以上代码,程序可以捕获异常:

关于vector的 operator[]、at()与迭代器访问

 

二,执行效率

(1),operatot []

int main(int argc, char * argv[])
{
	vector<int> vecInt(1000000, 1);
	clock_t start, finish;
	start = clock();
	for (int i = 0; i < vecInt.size(); i++)
	{
		vecInt[i] = 3;
	}


	finish = clock();
	double totalTime = (double)(finish - start) / CLOCKS_PER_SEC;
	cout << "此程序运行:" << totalTime << "秒" << endl;
	if (waitKey() == 27)
		return 0;
}

关于vector的 operator[]、at()与迭代器访问

(2),at()

int main(int argc, char * argv[])
{
	vector<int> vecInt(1000000, 1);
	clock_t start, finish;
	start = clock();
	for (int i = 0; i < vecInt.size(); i++)
	{
		vecInt.at(i) = 3;
	}

	finish = clock();
	double totalTime = (double)(finish - start) / CLOCKS_PER_SEC;
	cout << "此程序运行:" << totalTime << "秒" << endl;
	if (waitKey() == 27)
		return 0;
}

 关于vector的 operator[]、at()与迭代器访问

(3),迭代器

 

int main(int argc, char * argv[])
{
	vector<int> vecInt(1000000, 1);
	clock_t start, finish;
	start = clock();

	vector<int>::iterator startIter = vecInt.begin();
	vector<int>::iterator endIter = vecInt.end();
	for (; startIter != endIter; ++startIter) {
		*startIter = 3;
	}

	finish = clock();
	double totalTime = (double)(finish - start) / CLOCKS_PER_SEC;
	cout << "此程序运行:" << totalTime << "秒" << endl;
	if (waitKey() == 27)
		return 0;
}

关于vector的 operator[]、at()与迭代器访问

 

相关文章:

  • 2021-06-06
  • 2021-08-11
  • 2022-01-09
  • 2021-06-11
  • 2021-08-06
  • 2021-04-27
  • 2022-12-23
  • 2021-07-24
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-10
  • 2021-06-27
  • 2021-12-09
  • 2021-08-08
相关资源
相似解决方案