一,边界检查
operator[] 不做边界检查,程序会直接退出。
try
{
vecInt[3] = 5;
}
catch (const std::exception&e)
{
cerr <<"error:"<< e.what() << endl;
}
运行以上代码,程序会终止:
at()会做边界检查,可以用try catch捕获异常,程序可以不直接退出。
vector<int> vecInt(2, 1);
try
{
vecInt.at(3) = 5;
}
catch (const std::exception&e)
{
cerr <<"error:"<< e.what() << endl;
}
运行以上代码,程序可以捕获异常:
二,执行效率
(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;
}
(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;
}
(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;
}