Sal*_*osa 25 c++ arrays pointers iterator c++11
错误如下:
请求'arr'中的成员'begin','end'是非类型int [5],无法从表达式错误中推断出来.
我的代码:
#include <iostream>
using namespace std;
int main()
{
int * mypointer;
int arr[5] = {1,3,5,7,9};
mypointer = arr;
for(auto it = arr.begin(); it != arr.end(); ++it) {
cout<<*mypointer<<endl;
mypointer++;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
GMa*_*ckG 46
数组没有成员函数,因为它们不是类类型.这就是错误所说的.
您可以使用std::begin(arr)和std::end(arr)来自<iterator>标题.这也适用于该类型也有.begin()和.end()成员,通过超载:
#include <array>
#include <vector>
#include <iterator>
int main()
{
int c_array[5] = {};
std::array<int, 5> cpp_array = {};
std::vector<int> cpp_dynarray(5);
auto c_array_begin = std::begin(c_array); // = c_array + 0
auto c_array_end = std::end(c_array); // = c_array + 5
auto cpp_array_begin = std::begin(cpp_array); // = cpp_array.begin()
auto cpp_array_end = std::end(cpp_array); // = cpp_array.end()
auto cpp_dynarray_begin = std::begin(cpp_dynarray); // = cpp_dynarray.begin()
auto cpp_dynarray_end = std::end(cpp_dynarray); // = cpp_dynarray.end()
}
Run Code Online (Sandbox Code Playgroud)
对于标准的固定长度的 C 数组,你可以只写
int c_array[] = {1,3,5,7,9}, acc = 0;
for (auto it : c_array) {
acc += it;
}
Run Code Online (Sandbox Code Playgroud)
编译器执行幕后工作,无需创建所有这些开始和结束迭代器。
| 归档时间: |
|
| 查看次数: |
37114 次 |
| 最近记录: |