
Jika “memperluas” di sini berarti memasukkan lebih banyak elemen dalam vektor sehingga ukurannya (panjang) bertambah, maka suatu vektor dapat diperluas. Namun, “memperluas vektor” bukanlah frasa klasik di C++. Sebenarnya, “memperluas” dalam C++ sebenarnya berarti, mengganti nama objek dengan nilai kontennya. Jika sebuah vektor terdiri dari literal string, maka vektor dapat diganti dengan satu string yang terdiri dari literal string. Namun, ini harus dilakukan secara manual. Artinya, itu harus dilakukan oleh programmer dan bukan oleh perpustakaan.
Meskipun demikian, posting ini akan menjelaskan cara mengganti vektor literal string, dengan satu string literal. Posting ini juga akan menjelaskan berbagai cara di mana vektor C++ dapat ditingkatkan panjangnya. Panjang vektor dalam C++ disebut ukuran.
Vektor memiliki fungsi anggota. Ukurannya dapat ditingkatkan menggunakan fungsi anggota: resize(), insert(), emplace() dan push_back(). Artikel ini menjelaskan berbagai cara di mana vektor dapat diperluas, yaitu, bertambah besar; dan dalam kasus vektor literal string, diganti dengan semua literal string.
Lakukan pengkodean vektor di dalam badan fungsi main(), kecuali ada alasan bagus untuk melakukannya sebelum badan fungsi main(). Jangan lupa untuk memulai program dengan:
#include <iostream>
#include <vector>
using namespace std;
Isi Artikel
- Vektor String, ke Satu String
- Meningkatkan Ukuran Vektor
- Mengubah ukuran
- memasukkan
- Menempatkan
- Dorong_Kembali
- Mengetahui Panjang Vektor
- Kapasitas Vektor
- Memesan Ruang untuk Vektor
- Kesimpulan
Vektor String ke Satu String
Sebuah vektor literal string dapat diganti dengan satu string literal. Literal akan dipisahkan dengan koma dalam satu string. Kode berikut menggambarkan hal ini:
vectorvtr = {"Toyota", "Mitsubishi", "Ford", "Mercedes", "Jeep"};
char arrChars[100];
int ctr = 0; //counter
int i=0;
for (i=0; i<vtr.size(); i++) {
const char* str = vtr[i];
int j=0;
for (j=0; str[j] != ' '; j++) {
arrChars[ctr] = str[j];
++ctr;
}
arrChars[ctr] = ','; ++ctr; arrChars[ctr] = ' ';
++ctr;
}
arrChars[ctr] = ' ';
cout<<arrChars<<endl;
Outputnya adalah:
Toyota, Mitsubishi, Ford, Mercedes, Jeep,
yang merupakan salah satu string panjang. String array dan string literal dalam tanda kutip ganda, pada dasarnya adalah hal yang sama, diakhiri dengan ‘ ‘; meskipun akhir untuk literal string kutipan ganda tersirat. Satu string panjang terakhir hanya memiliki satu ‘ ‘ di akhir urutan karakter. Kode masih dapat dimodifikasi untuk menghapus koma dan spasi terakhir.
Meningkatkan Ukuran Vektor
Mengubah ukuran
Fungsi anggota size() dapat digunakan untuk mengembalikan size() vektor seperti yang ditunjukkan oleh kode berikut:
vectorvtr{'F', 'G', 'H', 'I', 'J'};
cout<<vtr.size() <<endl;
Keluarannya adalah 5.
void resize(size_type sz)
Untuk memperbesar ukuran vektor, vektor harus diubah ukurannya menjadi angka yang lebih besar. Kode berikut melakukan ini menggunakan fungsi anggota, ubah ukuran(size_type sz):
vectorvtr{'F', 'G', 'H', 'I', 'J'};
vtr.resize(7);
vtr[5] = 'K';
vtr[6] = 'L';
for (int i=0; i<vtr.size(); i++) {
cout<<vtr[i] << ' ';
}
cout<<endl;
Outputnya adalah:
F G H I J K L
Ketika sebuah vektor baru saja diubah ukurannya dengan fungsi anggota resize(), lokasi kosong baru akan tersedia menjelang akhir vektor. Lokasi baru ini kemudian dapat diisi.
void resize(size_type sz, const T& c)
Nilai yang sama dapat ditambahkan ke lokasi baru menjelang akhir vektor menggunakan metode kelebihan beban resize() ini. font>Ilustrasi:
vectorvtr{'F', 'G', 'H', 'I', 'J'};
vtr.resize(8, 'Z');
for (int i=0; i<vtr.size(); i++) {
cout<<vtr[i] << ' ';
}
cout<<endl;
Outputnya adalah:
F G H I J Z Z Z
memasukkan
Penyisipan terjadi di depan elemen yang ditunjuk oleh iterator.
insert(const_iterator position, const T& x)
Kode berikut menunjukkan bagaimana fungsi ini digunakan:
vectorvtr{'F', 'G', 'H', 'I', 'J'};
vector::iterator p = vtr.begin();
p++, p++;
char id = 'Z';
vtr.insert(p, id);
for (int i=0; i<vtr.size(); i++) {
cout<<vtr[i] << ' ';
}
cout<<endl;
Outputnya adalah:
F G Z H I J
‘Z’ telah disisipkan di depan H. Fungsi anggota begin() mengembalikan iterator yang menunjuk ke elemen pertama dari vektor. Iterator kemudian dapat dinaikkan ke posisi yang diinginkan. Perhatikan bahwa argumen kedua yang diharapkan untuk insert() di sini, adalah pengidentifikasi.
iterator insert(const_iterator position, T&& x)
Kode berikut menunjukkan bagaimana fungsi ini digunakan:
vectorvtr{'F', 'G', 'H', 'I', 'J'};
vector::iterator p = vtr.begin();
p++, p++;
vtr.insert(p, 'Z');
for (int i=0; i<vtr.size(); i++) {
cout<<vtr[i] << ' ';
}
cout<<endl;
Outputnya adalah:
F G Z H I J
‘Z’ telah disisipkan di depan H. Fungsi anggota begin() mengembalikan iterator yang menunjuk ke elemen pertama dari vektor. Perhatikan bahwa argumen kedua yang diharapkan untuk insert() di sini, adalah literal.
iterator insert(const_iterator position, size_type n, const T& x)
Nilai yang sama dapat dimasukkan lebih dari sekali. Kode berikut menggambarkan hal ini:
vectorvtr{'F', 'G', 'H', 'I', 'J'};
vector::iterator p = vtr.begin();
p++, p++;
char id = 'Z';
vtr.insert(p, 3, id);
for (int i=0; i<vtr.size(); i++) {
cout<<vtr[i] << ' ';
}
cout<<endl;
Outputnya adalah:
F G Z Z Z H I J
penyisipan iterator (posisi const_iterator, InputIterator pertama, InputIterator terakhir)
Rentang dari vektor lain dapat dimasukkan. Kode berikut menggambarkan hal ini:
vector otherVtr = {'K', 'L', 'M', 'N', 'O'};
vector::iterator i = otherVtr.begin();
i = i + 1;
vector::iterator j = otherVtr.end();
j = j - 2;
vectorvtr{'F', 'G', 'H', 'I', 'J'};
vector::iterator p = vtr.begin();
p++, p++;
vtr.insert(p, i, j);
for (int i=0; i<vtr.size(); i++) {
cout<<vtr[i] << ' ';
}
cout<<endl;
Outputnya adalah:
F G L M H I J
Untuk vektor lainnya, rentang diperoleh sebagai berikut: Fungsi anggota begin() mengembalikan iterator yang menunjuk ke elemen pertamanya. Iterator ini, saya bertambah untuk menunjuk ke elemen berikutnya. Fungsi anggota end() mengembalikan iterator yang menunjuk tepat setelah elemen terakhir. Iterator ini, j dikurangi dua kali dengan mengurangi 2 darinya, dan kemudian menunjuk ke elemen, ‘N’.
Pada titik ini, kisaran yang dibayangkan adalah:
'L', 'M', 'N'
Namun, dengan C++, elemen terakhir dalam rentang tidak akan dilibatkan (dimasukkan). Jadi, hanya “‘L’, ‘M'” yang dimasukkan.
iterator insert(const_iterator position, initializer_list<T> il)
Daftar literal vektor dapat dimasukkan. Kode berikut menggambarkan hal ini:
vectorvtr{'F', 'G', 'H', 'I', 'J'};
vector::iterator p = vtr.begin();
p++, p++;
vtr.insert(p, {'K', 'L', 'M', 'N', 'O'});
for (int i=0; i<vtr.size(); i++) {
cout<<vtr[i] << ' ';
}
cout<<endl;
Outputnya adalah:
F G K L M N O H I J
Menempatkan
Penggunaan emplace() mirip dengan useran insert(), dan banyak programmer lebih menyukainya daripada insert().
Tempatkan di dalam
Untuk kode berikut, ‘Z’ ditempatkan di dalam nilai, ‘F’, ‘G’, ‘H’, ‘I’, ‘J’:
vectorvtr{'F', 'G', 'H', 'I', 'J'};
vector::iterator p = vtr.begin() ;
p++, p++;
vtr.emplace(p, 'Z');
for (int i=0; i<vtr.size(); i++) {
cout<<vtr[i] << ' ';
}
cout<<endl;
Outputnya adalah:
Tempat di depan
Untuk kode berikut, ‘Z’ diletakkan di depan nilai, ‘F’, ‘G’, ‘H’, ‘I’, ‘J’:
vectorvtr{'F', 'G', 'H', 'I', 'J'};
vector::iterator p = vtr.begin();
vtr.emplace(p, 'Z');
for (int i=0; i<vtr.size(); i++) {
cout<<vtr[i] << ' ';
}
cout<<endl;
Iterator yang dikembalikan oleh begin() tidak bertambah; dan jadi outputnya adalah:
Z F G H I J
Dorong_Kembali
Fungsi anggota push_back() dapat digunakan untuk menambahkan elemen. Kode berikut menggambarkan hal ini:
vectorvtr{'F', 'G', 'H', 'I', 'J'};
vtr.push_back('Z');
for (int i=0; i<vtr.size(); i++) {
cout<<vtr[i] << ' ';
}
cout<<endl;
Outputnya adalah:
F G H I J Z
Sebuah elemen juga dapat ditambahkan menggunakan fungsi anggota emplace_back(). Kode berikut menggambarkan hal ini:
vectorvtr{'F', 'G', 'H', 'I', 'J'};
vtr.emplace_back('Z');
for (int i=0; i<vtr.size(); i++) {
cout<<vtr[i] << ' ';
}
cout<<endl;
Outputnya adalah:
F G H I J Z
Mengetahui Panjang Vektor
Ukuran vektor berarti jumlah elemen dalam vektor. Ini dapat diperoleh dengan menggunakan fungsi anggota size(). Program berikut menggambarkan hal ini:
#include
#include
using namespace std;
int main()
{
vectorvtr = {'F', 'G', 'H', 'I', 'J', 'K'};
int sz = vtr.size();
cout<<sz<<endl;
return 0;
}
Keluarannya adalah 6.
Kapasitas Vektor
Kapasitas vektor tidak boleh disamakan dengan ukuran vektor. Ketika sebuah vektor sedang dimanipulasi dan ditingkatkan, lokasi elemen-elemennya dalam memori komputer sedang diubah (dialokasikan kembali). Kapasitas suatu vektor adalah jumlah total elemen yang dapat ditampung oleh vektor tersebut tanpa memerlukan realokasi. Itu ditangguhkan dengan ukuran awal vektor. Program berikut mengilustrasikan ini untuk vektor kosong, dan untuk vektor 5 elemen:
#include
#include
using namespace std;
int main()
{
vector vtr1;
vector vtr2{'F', 'G', 'H', 'I', 'J'};
int cap1 = vtr1.capacity();
int cap2 = vtr2.capacity();
cout<< cap1 <<endl;
cout<< cap2 <<endl;
return 0;
}
Outputnya adalah:
0
5
Memesan Ruang untuk Vektor
void reserve(size_type n)
Ruang vektor dapat dipesan dengan fungsi ini. Program berikut mencadangkan ruang 5 elemen:
#include
#include
using namespace std;
int main()
{
vectorvtr = {'F', 'G', 'H'};
vtr.reserve(5);
int cap = vtr.capacity();
cout<< "New Capacity: " << cap <<endl;
vtr.push_back('I');
vtr.push_back('J');
vtr.push_back('K');
for (int i=0; i<vtr.size(); i++) {
cout<<vtr[i] << ' ';
}
cout<<endl;
return 0;
}
Outputnya adalah:
New Capacity: 5
F G H I J K
Ruang yang dicadangkan termasuk ruang untuk elemen awal. Fakta bahwa 5 ruang telah dipesan, tidak berarti bahwa suatu elemen tidak dapat ditambahkan lebih dari 5 elemen.
Kesimpulan
“Memperluas vektor” bukanlah frasa klasik di C++. Namun, jika “memperluas sebuah vektor” berarti, menambah panjang sebuah vektor, maka, ya, sebuah vektor dapat diperluas. Dalam C++ panjang vektor atau wadah C++ apa pun, disebut ukuran. Vektor dapat diperluas dengan fungsi anggota berikut: resize(), insert(), emplace() dan push_back(). Fungsi anggota terkait lainnya adalah: size(), capacity(), dan reserve(). Dalam banyak program C++, sebuah vektor akan dinaikkan dan diturunkan beberapa kali. Sebuah vektor da
pat dikurangi, menggunakan fungsi anggota hapus – lihat nanti. Jika sebuah vektor terdiri dari literal string, maka vektor dapat diganti dengan satu string panjang yang terdiri dari literal string.