Max*_*Max 7 c++ containers iterator c++11
我有一个实现cbegin()和cend()功能的自定义容器类.然后我在foreach循环中使用它,但它似乎需要begin()和end()成员函数,即使我尝试使用const修饰符:
for (const auto val: container)
Run Code Online (Sandbox Code Playgroud)
和这样:
for (auto const val: container)
Run Code Online (Sandbox Code Playgroud)
和这样:
for (const auto const val: container)
Run Code Online (Sandbox Code Playgroud)
是否有可能强迫foreach使用常数c函数?
Die*_*ühl 10
当然:使范围看起来好像是一个const范围:
template <typename T>
T const& make_const(T const& argument) {
return argument;
}
// ...
for (auto&& value: make_const(argument)) {
...
}
Run Code Online (Sandbox Code Playgroud)
在所有情况下基于范围的for意愿,但是,使用begin()和end()从不cbegin()或cend().您可能希望提供以下内容:
template <typename T>
auto begin(my_container<T> const& t) -> decltype(t.cbegin()) {
return t.cbegin();
}
template <typename T>
auto end(my_container<T> const& t) -> decltype(t.cend()) {
return t.cend();
}
Run Code Online (Sandbox Code Playgroud)
显然,您希望用my_container合适的容器类型替换.就个人而言,我可能只是提供合适begin()和end()成员.
我不知道是什么的决定,只提供cbegin()和cend()是的,但基于对范围内的那些不被使用.如果你想在一个范围内使用你的容器,你需要提供begin()和end()(尽管你可以让它们返回const迭代器)
| 归档时间: |
|
| 查看次数: |
1548 次 |
| 最近记录: |