Hướng dẫn dùng vector insert trong PHP
C++ là ngôn ngữ mạnh mẽ nhờ tính linh hoạt, gần gũi với ngôn ngữ máy. Bên cạnh đó còn có khả năng lập trình dựa trên mẫu có sẵn (template). Sức mạnh của C++ nằm ở STL (Standard Template Library) – một thư viện template dành cho C++ tổng hợp các cấu trúc dữ liệu cũng như giải thuật và các vector trong C++ được xây dựng một cách tổng quát cho nhiều trường hợp. Show Bộ thư viện này thực hiện toàn bộ các hoạt động ra vào của dữ liệu (iostream), quản lý mảng (vector) và hầu hết các tính năng của các cấu trúc dữ liệu cơ bản như (stack, queue, map, set…). Ngoài ra, STL còn bao gồm các thuật toán cơ bản: tính tổng, tìm min, max, sắp xếp (với đa dạng thuật toán sắp xếp), thay thế các phần tử, tìm kiếm (tìm kiếm bình thường và tìm kiếm dười dạng nhị phân). Toàn bộ những tính năng trên đều được cung cấp dưới dạng template nên việc sử dụng chúng cực kỳ tiện lợi và phù hợp với nhiều tình huống. Nhờ vậy, STL làm cho ngôn ngữ C++ trở nên “xịn xò” hơn. Nhưng nói đến STL thì sẽ là bài tập rất dài nên hôm nay mình sẽ chỉ đề cập đến vector thôi. Vậy Vector trong C++ là gì?Không giống như array (mảng), chỉ một số giá trị nhất định có thể được lưu trữ dưới một tên biến duy nhất. Vector trong C++ giống dynamic array (mảng động) nhưng có khả năng tự động thay đổi kích thước khi một phần tử được chèn hoặc xóa tùy thuộc vào nhu cầu của tác vụ được thực thi, với việc lưu trữ của chúng sẽ được vùng chứa tự động xử lý. Các phần tử vector được đặt trong contiguous storage (bộ nhớ liền kề) để chúng có thể được truy cập và duyệt qua bằng cách sử dụng iterator. Vì sao nên dùng VectorNếu bạn đã phát chán việc quản lý mảng động qua con trỏ trong C++ hay chán phải tạo mảng mới, copy các phần tử qua mảng mới, rồi lại xóa mảng cũ mỗi khi bạn muốn resize kích thước mảng động trong C++. Thật thừa thải, tốn thời gian và đó là thời điểm ta nhận ra C++ còn có vector. Một số điểm nổi trội của Vector– Bạn không cần phải khai báo kích thước của mảng ví dụ int A[100]…, vì vector có thể tự động nâng kích thước lên. – Nếu bạn thêm 1 phần tử vào vector đã đầy rồi, thì nó sẽ tự động tăng kích thước của nó lên để dành chỗ cho giá trị mới này. – Vector còn giúp cho bạn biết số lượng các phần tử mà bạn đang lưu trong đó. – Dùng số phần tử âm vẫn được trong vector ví dụ A[-6], A[-9], rất tiện trong việc cài đặt các giải thuật. Giới thiệu literals và operators”] Vector có thứ tự trong C++ không?Không có vector nào không được sắp xếp trong C++. Các phần tử vector được đặt trong bộ nhớ liền kề để chúng có thể được truy cập và di chuyển qua các iterator. Trong vector, dữ liệu được chèn vào cuối. Việc chèn một phần tử vào cuối sẽ mất thời gian chênh lệch, vì đôi khi có thể cần mở rộng vector. Việc xóa phần tử cuối cùng chỉ mất thời gian không đổi vì không xảy ra thay đổi kích thước. Chèn và xóa ở đầu hoặc giữa vector là tuyến tính theo thời gian. Các vector được lưu trữ trong C++ như thế nào?Để tạo một vector, bạn cần thực hiện theo cú pháp dưới đây: Cú pháp: #include Ví dụ: #include Vậy là chúng ta đã có một vector với mỗi phần tử có kiểu dữ liệu (object_type) là int. Sau đó bạn có thể gắn giá trị cho vector như này: vector Hoặc bạn cũng có thể tạo một vector rồi gán giá trị của một vector khác cho nó bằng cách: vector Cơ chế ngăn chặn rò rỉ bộ nhớ của VectorKhi một biến vector rời khỏi phạm vi đoạn code mà chương trình đang chạy, nó sẽ tự động giải phóng những phần bộ nhớ mà nó kiểm soát (nếu cần). Điều này không chỉ tiện dụng (vì bạn không cần tự tay giải phóng bộ nhớ), mà nó còn giúp ngăn ngừa lỗi rò rỉ bộ nhớ (memory leaks). Xem hàm dưới đây: void doSomething(bool earlyExit) { int *array = new int[3]{ 1, 3, 2 }; if (earlyExit) return; delete[] array; } Nếu biến earlyExit được gán là true, mảng array sẽ không bao giờ được giải phóng, và bộ nhớ sẽ bị rò rỉ. Tuy nhiên, nếu biến array là một vector, điều này sẽ không xảy ra, bởi vì bộ nhớ sẽ được giải phóng ngay sau khi biến array nằm ngoài phạm vi đoạn code mà chương trình đang chạy (bất kể hàm có bị thoát ra sớm hay không). Điều này làm cho vector an toàn hơn nhiều so với việc bạn phải tự chú ý đến việc giải phóng bộ nhớ. Vector tự ghi nhớ độ dài của mìnhKhông giống như mảng động được tích hợp sẵn của C++, cái mà không biết được độ dài của mảng mà nó đang trỏ tới là bao nhiêu, std::vectors tự theo dõi độ dài của chính nó. Chúng ta có thể lấy được độ dài của vector thông qua hàm size(): #include Output:
Tương tự với array, hàm size() sẽ trả về một giá trị thuộc kiểu nested type (kiểu dữ liệu lồng) là size_type, nó là một số nguyên không dấu. Các hàm của Vectors trong C ++Vector trong STL cung cấp cho chúng ta nhiều chức năng hữu ích khác nhau. 1. Modifiers Modifiers1. push_back(): Hàm đẩy một phần tử vào vị trí sau cùng của vector. Nếu kiểu của đối tượng được truyền dưới dạng tham số trong push_back() không giống với kiểu của vector thì sẽ bị ném ra.
2. assign(): Nó gán một giá trị mới cho các phần tử vector bằng cách thay thế các giá trị cũ.
3. pop_back(): Hàm pop_back () được sử dụng để xóa đi phần tử cuối cùng một vector.
4. insert(): Hàm này chèn các phần tử mới vào trước phần tử trước vị trí được trỏ bởi vòng lặp. Chúng ta cũng có thể chuyển một số đối số thứ ba, đếm số lần phần tử được chèn vào trước vị trí được trỏ.
5. erase(): Hàm được sử dụng để xóa các phần tử tùy theo vị trí vùng chứa
6. emplace(): Nó mở rộng vùng chứa bằng cách chèn phần tử mới vào
7. emplace_back(): Nó được sử dụng để chèn một phần tử mới vào vùng chứa vector, phần tử mới sẽ được thêm vào cuối vector ten-vector.emplace_back(value); 8. swap(): Hàm được sử dụng để hoán đổi nội dung của một vector này với một vector khác cùng kiểu. Kích thước có thể khác nhau.
9. clear(): Hàm được sử dụng để loại bỏ tất cả các phần tử của vùng chứa vector.
Ví dụ: / Modifiers in vector #include Output: Bạn có thể thấy cách sử dụng các hàm thuộc nhóm Modifiers mà chúng ta đã nghiên cứu ở trên qua ví dụ thực tiễn. Iterators
Ví dụ 1: #include Output: Trong ví dụ trên, chúng ta có thể thấy cách sử dụng hàm begin() và end(). Đầu tiên, chúng ta xác định một vector là vec1, chúng đẩy lùi các giá trị trong đó từ 1 đến 10 bằng cách sử dụng vòng lặp for. Sau đó, chúng in các giá trị của các vector của chúng tôi bằng cách sử dụng vòng lặp for, chúng tôi sử dụng hàm begin() và end() để chỉ định điểm đầu và điểm cuối của vòng lặp for của chúng tôi. Ví dụ 2: // C++ program to illustrate the // iterators in vector #include Output: Ví dụ 3: // CPP program to illustrate working of crbegin() // crend() #include Output:
Capacity
Ví dụ: #include Output: Chú ý: Khi thay đổi kích thước mảng vector, các giá trị của phần tử hiện có cần giữ nguyên, thì các phần tử mới được khởi tạo bằng giá trị mặc định của kiểu dữ liệu mảng. Chúng ta có thể thấy cách hoạt động của các hàm capacity như đã thảo luận ở trên. Element access
Ví dụ: // C++ program to illustrate the // element accesser in vector #include Output: Thực hiện nén nhiều giá trị boolsVector còn có một thủ thuật hay ho khác là sử dụng một cài đặt đặc biệt dành cho vector kiểu bool mà nó có thể nén 8 giá trị booleans vào trong chỉ một byte (amazing!!) Quá trình này đã được cài sẵn, tất cả những gì bạn cần chỉ là sử dụng nó như một tính năng hỗ trợ khi lập trình. Thủ thuật này cũng sẽ không ảnh hưởng gì đến cách mà bạn sử dụng vector. #include Output: The length is: 5 1 0 0 1 1 KếtVới những cú pháp mẫu và ví dụ thực tiễn trên, chúng ta kết thúc phần tìm hiểu về vector trong C++. Tôi hy vọng bạn đã phân biệt được các hàm khác nhau của vector và nắm được cách hoạt động của từng hàm. Vì vector hỗ trợ rất tốt trong việc thao tác với mảng động, đảm bảo an toàn và dễ dàng hơn. Bạn nên sử dụng vector trong hầu hết các trường hợp đụng tới mảng động. Nguồn kiến thức về vector bạn nên tham khảo:
Có thể bạn muốn xem thêm:
Xem thêm việc làm C++ Developer tại TopDev |