C++Arrays,std::array,std::vectorまとめ
2761 ワード
原文:https://shendrick.net/Coding%20Tips/2015/03/15/cpparrayvsvector.html @Seth Hendrick Original article: https://shendrick.net/Coding%20Tips/2015/03/15/cpparrayvsvector.html @Seth Hendrick
C-Style配列
に値を付ける
配列とポインタ
配列サイズ
2つ目の例では、関数は正しい配列サイズを返す.これは、配列が入力パラメータであるときに入る
ループ
上記の節と同様に,配列は同じ作用範囲でC++11の遍歴サイクルを用いることができ,
しかし、配列が他の関数に変数として入力されると、ループは無効になります.
原因はやはり同じで、伝わるのはポインタです.
配列の宣言
C-Style配列
に値を付ける
int myArray[3] = {1, 2, 3};
配列とポインタ
a[1]
は*(a+1)
に等しいstd::cout << std::boolalpha << (myArray[0] == *myArray) << std::endl;
std::cout << std::boolalpha << (myArray[1] == *(myArray + 1) << std::endl;
// Outputs:
// true
// true
配列サイズ
int myArray[5] = {1, 2, 3, 4, 5};
size_t arraySize = sizeof(myArray) / sizeof(int);
std::cout << "C-style array size: " << arraySize << std::endl;
// Outputs:
// C-style array size: 5
#include
void printSize(int someArray[5]) {
std::cout << sizeof(someArray)/sizeof(int) << std::endl;
}
int main() {
int myArray[5] = {1, 2, 3, 4, 5};
printSize(myArray);
}
// Outputs:
// 2
2つ目の例では、関数は正しい配列サイズを返す.これは、配列が入力パラメータであるときに入る
size_t
の大きさのポインタであり、具体的な機械では8バイトの大きさである可能性があり、int
のタイプの大きさは4バイトであるため、第2の例はsizeof(size_t) / sizeof(int)
に相当し、出力結果は2である.ループ
上記の節と同様に,配列は同じ作用範囲でC++11の遍歴サイクルを用いることができ,
int main() {
int myArray[5] = {1, 2, 3, 4, 5};
for (int &i : myArray) {
std::cout << i << ", " << std::endl;
}
}
しかし、配列が他の関数に変数として入力されると、ループは無効になります.
#include
void printElements(int someArray[5]) {
for (int &i : someArray) {
std::cout << i << ", " << std::endl;
}
}
int main() {
int myArray[5] = {1, 2, 3, 4, 5};
printElements(myArray);
}
原因はやはり同じで、伝わるのはポインタです.
std::array
std::array
は包装後のC配列であり、コンパイル時に配列の大きさを決定しなければならない.配列の宣言
#include
#include
void printElements(const std::array &someArray) {
for (const int &i : someArray) {
std::cout << i << ", " << std::endl;
}
std::cout << "Size: " << someArray.size() << std::endl;
}
int main() {
std::array myArray = {1, 2, 3, 4, 5};
printElements(myArray);
}
// Outputs:
// 1,
// 2,
// 3,
// 4,
// 5,
// Size: 5
std::vector
std::array
はC配列のパッケージであり、std::vector
は元のC配列と全く異なるheap
上の動的配列であり、配列の大きさはコンパイル時に不確定である.std::array
はこのようなパッケージと見なすことができるint a[5];
std::vector
はint *a = net int[5];