相关疑难解决方法(0)

为什么在C++ 11中使用非成员开始和结束函数?

每个标准容器具有begin和end方法,返回的迭代器是容器.然而,C++ 11显然已经引入自由函数调用std::begin和std::end该调用begin和end成员函数.所以,而不是写作

auto i = v.begin();
auto e = v.end();
Run Code Online (Sandbox Code Playgroud)

你会写的

using std::begin;
using std::end;
auto i = begin(v);
auto e = end(v);
Run Code Online (Sandbox Code Playgroud)

在他的演讲中,编写现代C++,Herb Sutter说当你想要容器的开始或结束迭代器时,你应该总是使用自由函数.但是,他没有详细说明你想要的原因.查看代码,它可以为您节省一个字符.因此,就标准容器而言,自由函数似乎完全没用.Herb Sutter表示非标准容器有好处,但他再次没有详细说明.

因此,问题是除了调用相应的成员函数版本之外,自由函数版本究竟做了什么,std::begin并且std::end做了什么,为什么要使用它们呢?

c++ iterator stl c++11 container-data-type

185
推荐指数
6
解决办法
3万
查看次数

是否需要包含头文件 <iterator> 才能使用开始和结束函数?

要获取指向数组第一个和最后一个元素的指针,我们可以使用 begin 和 end 函数:https : //stackoverflow.com/a/14595314/5761266

但是,我注意到如果省略#include <iterator>. 为什么会出现这种情况,因为这些函数是在<iterator>标题中定义的?

我使用的唯一标题是<iostream>.
我使用的程序:http : //coliru.stacked-crooked.com/a/28b2b449aae19a47

c++

4
推荐指数
1
解决办法
4806
查看次数

迭代器或 std::iota 与常规 C++ 数组?

有没有办法达到与此相同的效果,

std::list<int> l(10);
std::iota(l.begin(), l.end(), -4);
Run Code Online (Sandbox Code Playgroud)

与常规int a[]?

或者,以下是唯一的解决方法:

for (iterator itr = begin; itr != end; ++itr)
    /* ... visit *itr here ... */
Run Code Online (Sandbox Code Playgroud)

c++ iteration foreach iota c++11

0
推荐指数
1
解决办法
1359
查看次数

标签 统计

c++ ×3

c++11 ×2

container-data-type ×1

foreach ×1

iota ×1

iteration ×1

iterator ×1

stl ×1