gpt4 book ai didi

c++ - 使用迭代器访问 vector 的特定点

转载 作者:行者123 更新时间:2023-11-28 07:19:35 27 4
gpt4 key购买 nike

我正在尝试找出使用迭代器访问 vector 中位置的最佳方法。我知道迭代器的行为类似于指针,所以这是我想出的唯一方法。我想知道是否有更好的或不同的方式。这是代码:

   //This is a pointer to a vector of the class Particle BTW. vector < Particle > *particleList;
vector<Particle>::iterator it = particleList->begin();
// I assign a specific position outside the loop to a new iterator that won't be affected
vector<Particle>::iterator it2 = particleList->begin() + 3;
for( it; it != particleList->end(); it++){


it->draw();
//I'm interested in the velocity of this element in particular
cout << it2->vel << endl;
}

谢谢,

中号

最佳答案

尝试以下操作

for (auto i = particleList->begin(); i < particleList->begin(); ++i) {
i->draw();
std::cout << (i+3)->vel << "\n";
}

请注意,没有理由使用 std::endlstd::endl 有一个隐式刷新,当输出到日志文件时会降低性能,并且当输出到控制台时,它已经是行缓冲的,这意味着行尾已经刷新。

注意 2,您只能将 +i 一起使用,因为 i 是一个随机访问迭代器,因为 particleList是一个 std::vector,如果您将 say particleList 更改为 std::list,则迭代器将是双向迭代器而不是随机访问迭代器,你将无法使用 + 在这种情况下你需要使用 std::advance 就像 WhozCraig 提到的那样,但是在像这样的拷贝上这样做:

for (auto i = particleList->begin(); i < particleList->begin(); ++i) {
i->draw();
auto i2 = i;
std::advance(i2, 3)
std::cout << i2->vel << "\n";
}

虽然就我个人而言,在这种情况下,我只会使用两个迭代器而不是 std::advance 进行迭代,因为 std::advance 在时间上是线性的。做这样的事情:

auto i = particleList->begin();
auto i2 = particleList->begin();
std::advance(i2, 3);
for (; i < particleList->end(); ++i, ++i2) {
i->draw();
std::cout << i2->vel << "\n";
}

注意 3:(i+3)i2 将超出列表的末尾( vector ),因此请在此处做一些聪明的事情。

关于c++ - 使用迭代器访问 vector 的特定点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19697474/

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