gpt4 book ai didi

c++ - iterator 和 back_insert_iterator 有什么区别?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:02:15 27 4
gpt4 key购买 nike

如果随机访问迭代器可用于访问相对于它们指向的元素的任意偏移位置的元素(有点像指针),为什么它们不能用于像 std::copy() 这样的通用算法 而不是使用 back_insert_iterator,两者有什么区别?

最佳答案

std::back_insert_iterator 是一种特定类型output 迭代器,它支持push_back 操作。当您使用 operator=write 时,它会将值 push_back 到底层容器中 — 因此,从这个意义上说,它充当具有 push_back 的容器的适配器成员函数。

举个例子很容易理解:

std::vector<int> v;

std::back_insert_iterator<std::vector<int>> it(v);

*it = 10; // it is equivalent to v.push_back(10);
it = 99; // it is ALSO equivalent to v.push_back(99);

for (auto const & i : v)
std::cout << i << " " ; //10 99

它输出:

10 99

Online Demo .

it 上的常用迭代器操作++* 没有效果。

但是你很少直接使用它们(直到现在我才直接使用它)。您将它们与算法一起使用,例如 std::copy 在这种情况下您还可以使用 std::back_inserter function 返回类型的对象std::back_insert_iterator

//assuming dest is a container which supports push_back!
std::copy(src.begin(), src.end(), std::back_inserter(dest));

您还希望看到以下(适配器)迭代器:

因此,根据容器,您选择适配器迭代器。

请注意,它们都是输出迭代器。

why can't they be used in generic algorithms like std::copy() instead of using back_insert_iterator.

当然,您可以在像 std::copy 这样的算法中使用随机访问迭代器(或任何 output 迭代器)作为第三个参数,但这假定迭代器正在引用现有范围 - *it++it 已针对您传递的值进行了明确定义。您传递它们以覆盖该范围的现有元素,而 std::back_insert_iterator向容器添加新元素。

希望对您有所帮助。

关于c++ - iterator 和 back_insert_iterator 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19907677/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com