![](/img/trans.png)
[英]How do I get non-const iterators from a std::stack<T, std::vector<T>>?
[英]How to get ::iterator of const std::vector<T>
我想从const std::vector<T>
获取iterator
,但找不到向编译器解释的方法。 这是它的样子:
(const std::vector<T>)::iterator
解决方法:typedef 或使用
template<typename T>
using const_vec = const std::vector<T>;
const_vec::iterator ...
更新。 std::vector::iterator 就是例子。 问题是关于 C++ 语法的。
const
限定符不会更改有关类型定义的任何内容。 因此, iterator
在型const std::vector<T>
是相同std::vector<T>
只需使用
std::vector<T>::iterator
或者,如果T
是模板参数,则使其成为依赖名称:
typename std::vector<T>::iterator
不过,您可能不想要iterator
,因为没有std::vector<T>
函数可以在const
限定实例上返回iterator
。 你可能想要const_iterator
代替。
通常,您无论如何都不需要访问迭代器类型别名。 您可以从变量定义中的auto
获取正确的类型:
const std::vector<T> vec{/* ... */};
auto it = vec.begin();
如果您需要类型本身,或者使用decltype
:
const std::vector<T> vec{/* ... */};
using iterator = decltype(vec.begin());
您可以使用std::vector<int>::const_iterator
例如:
const std::vector<int> v{ 1, 2, 3, 4, 5 };
std::vector<int>::const_iterator it = v.begin();
或者只是利用auto
像:
const std::vector<int> v{ 1, 2, 3, 4, 5 };
auto it = v.begin();
您应该阅读文档vector.begin()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.