也许这个问题很简单,但第二次考虑它我想知道如何以正确的方式做到以下几点:
std::vector<K> v = ...;
for(T i=0; i<v.size(); ++i) {
const K& t = v[i];
// use t *and i*
}
Run Code Online (Sandbox Code Playgroud)
应该T
是什么类型的?int
,unsigned int
,int32_t
,size_t
(这将是的类型v.size()
)或任何其他建议?请尝试考虑可移植性,错误倾向和性能,并在您的答案中保持客观.
编辑:我没有选择迭代器,因为它也想明确使用索引号.
类型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
}
Run Code Online (Sandbox Code Playgroud)
或者,在C++ 0x中:
std::vector<K> v = ...;
for (auto i = v.begin(); i != v.end(); ++i) {
const K& t = *i;
// use t
}
Run Code Online (Sandbox Code Playgroud)
在回答您关于将迭代器使用向量索引的注释时,请考虑std::distance()
向量迭代器的常量时间操作函数:
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
}
Run Code Online (Sandbox Code Playgroud)