gpt4 book ai didi

c++ - std::vector 如何访问它们之间有巨大差距的元素?

转载 作者:行者123 更新时间:2023-12-01 08:34:58 24 4
gpt4 key购买 nike

有这个代码:

template <class IIt, class OIt>
OIt copy2(IIt begin, IIt end, OIt dest)
{
while (begin != end)
{
//make gap between element addresses
for (int i = 0; i < 99999999; i++)
{
dest++;
}
*dest++ = *begin++;
}
return dest;
}

int main(int argc, char** argv)
{
vector<int> vec({ 1, 2, 3 });
vector<int> vec2;
copy2(vec.begin(), vec.end(), back_inserter(vec2));
for (int i : vec2)
{
cout << i << endl;
}
}
编译需要很长时间,但最终会得到正确的输出
1
2
3
问题是(不知道 std::vector 的内部实现,是 c-style 数组?还是更复杂的结构?),如何在 for(int i:vec2) 中正确找到这些元素? ,当这些元素的地址(指针)不是连续的时? (即因为迭代器/指针移动了 99999999 )。
我认为对 OutputIterator 有要求拥有该属性,只能对其进行一次访问,一次轮类。但是当你在访问它们之间多次移动(添加)它时,就会有一个差距,这在我的情况下是相当大的。那么它是如何编译的呢?

最佳答案

你被愚弄了。std::back_inserter 返回的迭代器有 it++ as a no-op .那么你正在创造的那些“差距”?是的,这一切都无济于事。

关于c++ - std::vector 如何访问它们之间有巨大差距的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63196352/

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