Oldingi maqolada aytib o'tganimizdek, array o'zgarmas sig'imga ega va biz uni ishga tushirishda massiv hajmini ko'rsatishimiz kerak. Ba'zan bu biroz noqulay va behuda bo'ladi.
Shu sababli, koʻpgina dasturlash tillari oʻrnatilgan dynamic arrayni taklif qiladi, bu esa baribir tasodifiy kirish roʻyxati maʼlumotlar tuzilmasi boʻlib, lekin oʻzgaruvchan oʻlchamga ega. Masalan, bizda C++ da vektor va Golang da slice mavjud.
Operations in Dynamic Array
Keling, dinamik massivdan foydalanishni ko'rib chiqaylik:
#include <iostream>
int main() {
// 1. initialize
vector<int> v0;
vector<int> v1(5, 0);
// 2. make a copy
vector<int> v2(v1.begin(), v1.end());
vector<int> v3(v2);
// 3. cast an array to a vector
int a[5] = {0, 1, 2, 3, 4};
vector<int> v4(a, *(&a + 1));
// 4. get length
cout << "The size of v4 is: " << v4.size() << endl;
// 5. access element
cout << "The first element in v4 is: " << v4[0] << endl;
// 6. iterate the vector
cout << "[Version 1] The contents of v4 are:";
for (int i = 0; i < v4.size(); ++i) {
cout << " " << v4[i];
}
cout << endl;
cout << "[Version 2] The contents of v4 are:";
for (int& item : v4) {
cout << " " << item;
}
cout << endl;
cout << "[Version 3] The contents of v4 are:";
for (auto item = v4.begin(); item != v4.end(); ++item) {
cout << " " << *item;
}
cout << endl;
// 7. modify element
v4[0] = 5;
// 8. sort
sort(v4.begin(), v4.end());
// 9. add new element at the end of the vector
v4.push_back(-1);
// 10. delete the last element
v4.pop_back();
}
package main
import (
"fmt"
"sort"
)
func main() {
// 1. initialize
v0 := []int{}
fmt.Println("v0", v0)
v1 := make([]int, 5)
fmt.Println("v1", v1)
// 2. make a copy
v2 := append([]int(nil), v1...)
fmt.Println("v2", v2)
v3 := append([]int(nil), v2...)
fmt.Println("v3", v3)
// 3. cast an array to a slice
a := [5]int{0, 1, 2, 3, 4}
v4 := a[:]
fmt.Println("v4", v4)
// 4. get length
fmt.Println("The size of v4 is:", len(v4))
// 5. access element
fmt.Println("The first element in v4 is:", v4[0])
// 6. iterate the slice
fmt.Println("[Version 1] The contents of v4 are:")
for i := 0; i < len(v4); i++ {
fmt.Print(" ", v4[i])
}
fmt.Println()
fmt.Println("[Version 2] The contents of v4 are:")
for _, item := range v4 {
fmt.Print(" ", item)
}
fmt.Println()
// 7. modify element
v4[0] = 5
// 8. sort
sort.Ints(v4)
// 9. add new element at the end of the slice
v4 = append(v4, -1)
// 10. delete the last element
v4 = v4[:len(v4)-1]
}