回答編集履歴

2

修正

2020/12/05 08:14

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -5,6 +5,10 @@
5
5
 
6
6
 
7
7
  手元で確認したところ、at() と operator[] やポインタで質問者さんの書かれているように4倍以上の差が出ませんでしたが、at() が一番遅いのは当然そうなるかと思います。
8
+
9
+
10
+
11
+ `一行の記述で高速に要素にアクセス`ということであれば、[] 演算子によるアクセスでいいのではないでしょうか
8
12
 
9
13
 
10
14
 

1

修正

2020/12/05 08:14

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -49,3 +49,101 @@
49
49
  168.613 us 158.597 us 181.088 us
50
50
 
51
51
  ```
52
+
53
+
54
+
55
+ [Catch2](https://github.com/catchorg/Catch2) でベンチマークを取りました。
56
+
57
+
58
+
59
+ ```
60
+
61
+ #define CATCH_CONFIG_MAIN
62
+
63
+ #define CATCH_CONFIG_ENABLE_BENCHMARKING
64
+
65
+ #include <catch2/catch.hpp>
66
+
67
+
68
+
69
+ TEST_CASE("std::vector")
70
+
71
+ {
72
+
73
+ using namespace std;
74
+
75
+ const int NUM_ELEMENTS = 1000;
76
+
77
+ const int NUM_ROOP = 100000;
78
+
79
+ vector<int> v(NUM_ELEMENTS);
80
+
81
+
82
+
83
+ BENCHMARK("at()")
84
+
85
+ {
86
+
87
+ for (int j = 0; j < NUM_ROOP; j++) {
88
+
89
+ for (int i = 0; i < NUM_ELEMENTS; i++)
90
+
91
+ v.at(i) = 100;
92
+
93
+ }
94
+
95
+ };
96
+
97
+
98
+
99
+ BENCHMARK("operator[]")
100
+
101
+ {
102
+
103
+ for (int j = 0; j < NUM_ROOP; j++) {
104
+
105
+ for (int i = 0; i < NUM_ELEMENTS; i++)
106
+
107
+ v[i] = 100;
108
+
109
+ }
110
+
111
+ };
112
+
113
+
114
+
115
+ BENCHMARK("data()")
116
+
117
+ {
118
+
119
+ for (int j = 0; j < NUM_ROOP; j++) {
120
+
121
+ int *p = v.data();
122
+
123
+ for (int i = 0; i < NUM_ELEMENTS; i++) {
124
+
125
+ *p = 100;
126
+
127
+ p++;
128
+
129
+ }
130
+
131
+ }
132
+
133
+ };
134
+
135
+
136
+
137
+ BENCHMARK("std::fill()")
138
+
139
+ {
140
+
141
+ for (int j = 0; j < NUM_ROOP; j++)
142
+
143
+ std::fill(v.begin(), v.end(), -1);
144
+
145
+ };
146
+
147
+ }
148
+
149
+ ```