容器类的 end() 成员函数 是否 内联函数?该如何解决
容器类的 end() 成员函数 是否 内联函数?
std::vector <int> int_vec;
...
for (std::vector <int> ::const_iterator iter = int_vec.begin();
iter != int_vec.end(); // 此处是否付出函数调用的代价?
++iter)
{
...
}
------解决方案--------------------
C++没有规定,也没有必要知道。
实在想去掉那一点开销的话,保存int_vec.end()的值,不要每次循环都计算。
------解决方案--------------------
应该是内联吧,end()定义在class 里面,就是return一个_last的iterator,我想多数编译器都会内联的.
------解决方案--------------------
如果你在for循环体内不会添加或删除元素,那就可以保存end()返回的迭代器。
反之,你就必须在循环条件判断中每次求取end()的值。
因为任何元素的添加都有可能造成vector容器元素内存空间的重分配,也就可能造成原先保存的迭代器失效。
如果你想了解vector容器的实现,你可以在int_vec.end()函数处右击,然后选择“go to definition of end” . 将会跳到end()函数的实现文件。
std::vector <int> int_vec;
...
for (std::vector <int> ::const_iterator iter = int_vec.begin();
iter != int_vec.end(); // 此处是否付出函数调用的代价?
++iter)
{
...
}
------解决方案--------------------
C++没有规定,也没有必要知道。
实在想去掉那一点开销的话,保存int_vec.end()的值,不要每次循环都计算。
------解决方案--------------------
应该是内联吧,end()定义在class 里面,就是return一个_last的iterator,我想多数编译器都会内联的.
------解决方案--------------------
如果你在for循环体内不会添加或删除元素,那就可以保存end()返回的迭代器。
反之,你就必须在循环条件判断中每次求取end()的值。
因为任何元素的添加都有可能造成vector容器元素内存空间的重分配,也就可能造成原先保存的迭代器失效。
如果你想了解vector容器的实现,你可以在int_vec.end()函数处右击,然后选择“go to definition of end” . 将会跳到end()函数的实现文件。