gpt4 book ai didi

c++ - 迭代 std::vector(没有迭代器)时使用哪种类型?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:03:09 25 4
gpt4 key购买 nike

也许这个问题是微不足道的,但再想想我想知道如何真正正确地做以下事情:

std::vector<K> v = ...;
for(T i=0; i<v.size(); ++i) {
const K& t = v[i];
// use t *and i*
}

T 应该是什么类型? intunsigned intint32_tsize_t(这将是 v.size( )) 或任何其他建议?请尝试考虑可移植性、易错性和性能,并在您的回答中保持客观。

编辑:我没有选择迭代器,因为它也想显式使用索引号i。

最佳答案

i 的类型应与 size() 的返回值相同,即 std::vector<K>::size_type .然而,在实践中,size_t会做的很好。如果您使用有符号整数类型,那么您的编译器可能会警告小于比较中的有符号/无符号不匹配。

通常你会为此使用迭代器:

std::vector<K> v = ...;
for (std::vector<K>::iterator i = v.begin(); i != v.end(); ++i) {
const K& t = *i;
// use t
}

或者,在 C++0x 中:

std::vector<K> v = ...;
for (auto i = v.begin(); i != v.end(); ++i) {
const K& t = *i;
// use t
}

为了回应您关于将 vector 索引与迭代器一起使用的评论,请考虑 std::distance() vector 迭代器的常数时间操作函数:

std::vector<K> v = ...;
for (auto i = v.begin(); i != v.end(); ++i) {
const K& t = *i;
size_t index = std::distance(v.begin(), i);
// use t and index
}

关于c++ - 迭代 std::vector(没有迭代器)时使用哪种类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3342150/

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