vector<bool>
Sınıf
vector<bool>
sınıfı, türündeki vector
bool
öğeler için kısmi bir özelleştirmedir. Uzmanlık tarafından kullanılan temel tür için bir ayırıcıya sahiptir ve bu da bit başına bir bool
değer depolayarak alan iyileştirmesi sağlar.
Sözdizimi
template <class Allocator = allocator<bool>>
class vector<bool, Allocator>
Açıklamalar
Bu sınıf şablonu özelleştirmesi, bu makalede açıklanan farklılıklar dışında gibi vector
davranır.
Türüyle bool
ilgilenen işlemler kapsayıcı depolamadaki değerlere karşılık gelir. allocator_traits::construct
bu değerleri oluşturmak için kullanılmaz.
Tür tanımları
Tür adı | Açıklama |
---|---|
const_pointer |
öğesinin Boole öğesinin vector<bool> sabit işaretçisi olarak görev yapabilecek bir tür tanımıconst_iterator . |
const_reference |
için bool bir tür tanımı. Başlatmadan sonra, özgün değere yapılan güncelleştirmeleri gözlemlemez. |
pointer |
öğesinin Boole iterator öğesinin vector<bool> işaretçisi olarak görev yapabilecek bir tür tanımı. |
Üye işlevleri
Üye işlevi | Açıklama |
---|---|
flip |
içindeki vector<bool> tüm bitleri ters çevirir. |
swap |
İki vector<bool> öğesinin öğelerini değiştirir. |
operator[] |
Belirtilen konumdaki vector<bool> öğeye simülasyon başvurusu döndürür. |
at |
Proxy sınıfını vector<bool>::reference kullanması dışında, belirtilmemiş vector ::at işleviyle aynı işlevi görür. Ayrıca bkz. operator[] . |
front |
Proxy sınıfını vector<bool>::reference kullanması dışında, belirtilmemiş vector ::front işleviyle aynı işlevi görür. Ayrıca bkz. operator[] . |
back |
Proxy sınıfını vector<bool>::reference kullanması dışında, özelleştirilmemiş vector ::back işleviyle aynı işlevi görür. Ayrıca bkz. operator[] . |
Proxy Sınıfı
Veri Akışı Adı | Açıklama |
---|---|
vector<bool>::reference Sınıf |
Davranış simülasyonu bool& yapmak için ara sunucu işlevi gören ve nesneleri bir nesne içindeki öğelere (tek bit) başvurular sağlayabilen bir vector<bool> sınıf. |
Gereksinimler
Üst Bilgi: <vector>
Ad alanı: std
vector<bool>::const_pointer
Nesnenin vector<bool>
içerdiği sıranın Boole öğesinin sabit işaretçisi olarak görev yapabilecek bir nesneyi açıklayan bir tür.
typedef const_iterator const_pointer;
vector<bool>::const_reference
Nesnenin vector<bool>
içerdiği sıranın Boole öğesine sabit başvuru işlevi görecek bir nesneyi açıklayan bir tür.
typedef bool const_reference;
Açıklamalar
Daha fazla bilgi ve kod örnekleri için bkz vector<bool>::reference::operator=
. .
vector<bool>::flip
içindeki vector<bool>
tüm bitleri ters çevirir.
void flip();
Örnek
// vector_bool_flip.cpp
// compile with: /EHsc /W4
#include <vector>
#include <iostream>
int main()
{
using namespace std;
cout << boolalpha; // format output for subsequent code
vector<bool> vb = { true, false, false, true, true };
cout << "The vector is:" << endl << " ";
for (const auto& b : vb) {
cout << b << " ";
}
cout << endl;
vb.flip();
cout << "The flipped vector is:" << endl << " ";
for (const auto& b : vb) {
cout << b << " ";
}
cout << endl;
}
vector<bool>::operator[]
Belirtilen konumdaki vector<bool>
öğeye simülasyon başvurusu döndürür.
vector<bool>::reference operator[](size_type Pos);
vector&<bool&>::const_reference operator[](size_type Pos) const;
Parametreler
Pos
Öğesinin vector<bool>
konumu.
Dönüş Değeri
vector<bool>::reference
Dizine alınan öğenin değerini içeren bir veya vector<bool>::const_reference
nesnesi.
Belirtilen konum kapsayıcısının boyutuna eşit veya ondan daha büyük ise, sonuç tanımsızdır.
Açıklamalar
küme ile _ITERATOR_DEBUG_LEVEL
derlerseniz, vektör sınırlarının dışındaki bir öğeye erişmeye çalıştığınızda bir çalışma zamanı hatası oluşur. Daha fazla bilgi için bkz . İşaretli Yineleyiciler.
Örnek
Bu kod örneği, doğru kullanımını vector<bool>::operator[]
ve açıklama satırı yapılan iki yaygın kodlama hatasını gösterir. Döndüren vector<bool>::operator[]
nesnenin vector<bool>::reference
adresi alınamadığından bu hatalar hatalara neden olur.
// cl.exe /EHsc /nologo /W4 /MTd
#include <vector>
#include <iostream>
int main()
{
using namespace std;
cout << boolalpha;
vector<bool> vb;
vb.push_back(true);
vb.push_back(false);
// bool* pb = &vb[1]; // conversion error - do not use
// bool& refb = vb[1]; // conversion error - do not use
bool hold = vb[1];
cout << "The second element of vb is " << vb[1] << endl;
cout << "The held value from the second element of vb is " << hold << endl;
// Note this doesn't modify hold.
vb[1] = true;
cout << "The second element of vb is " << vb[1] << endl;
cout << "The held value from the second element of vb is " << hold << endl;
}
The second element of vb is false
The held value from the second element of vb is false
The second element of vb is true
The held value from the second element of vb is false
vector<bool>::pointer
Nesnenin vector<bool>
içerdiği sıranın Boole öğesinin işaretçisi olarak görev yapabilecek bir nesneyi açıklayan bir tür.
typedef iterator pointer;
vector<bool>::reference
Sınıf
sınıfı, vector<bool>::reference
benzetimi bool&
için Sınıfı tarafından vector<bool>
sağlanan bir proxy sınıfıdır.
Açıklamalar
C++ yerel olarak bitlere doğrudan başvurulara izin vermediğinden sanal başvuru gereklidir. vector<bool>
bu proxy sınıfı kullanılarak başvurulabilen öğe başına yalnızca bir bit kullanır. Ancak, bazı atamalar geçerli olmadığından başvuru benzetimi tamamlanmamıştır. Örneğin, nesnenin vector<bool>::reference
adresi alınamadığından, kullanan vector<bool>::operator[]
aşağıdaki kod doğru değildir:
vector<bool> vb;
//...
bool* pb = &vb[1]; // conversion error - do not use
bool& refb = vb[1]; // conversion error - do not use
vector<bool>::reference::flip
Başvuruda vector<bool>
bulunan bir öğenin Boole değerini ters çevirir.
void flip();
Örnek
// vector_bool_ref_flip.cpp
// compile with: /EHsc /W4
#include <vector>
#include <iostream>
int main()
{
using namespace std;
cout << boolalpha;
vector<bool> vb = { true, false, false, true, true };
cout << "The vector is: " << endl << " ";
for (const auto& b : vb) {
cout << b << " ";
}
cout << endl;
vector<bool>::reference vbref = vb.front();
vbref.flip();
cout << "The vector with first element flipped is: " << endl << " ";
for (const auto& b : vb) {
cout << b << " ";
}
cout << endl;
}
The vector is:
true false false true true
The vector with first element flipped is:
false false false true true
vector<bool>::reference::operator bool
'den vector<bool>::reference
öğesine bool
örtük bir dönüştürme sağlar.
operator bool() const;
Dönüş Değeri
nesnesinin öğesinin vector<bool>
Boole değeri.
Açıklamalar
Nesne vector<bool>
bu işleç tarafından değiştirilemez.
vector<bool>::reference::operator=
Bir bite bir Boolean değeri, veya başvurulan bir öğenin tuttuğu değeri atar.
reference& operator=(const reference& Right);
reference& operator=(bool Val);
Parametreler
Right
Değerinin bite atanacağı öğe başvurusu.
Val
Bite atanacak Boolean değeri.
Örnek
// vector_bool_ref_op_assign.cpp
// compile with: /EHsc
#include <vector>
#include <iostream>
#include <string>
using namespace std;
template <typename C> void print(const string& s, const C& c) {
cout << s;
for (const auto& e : c) {
cout << e << " ";
}
cout << endl;
}
int main()
{
cout << boolalpha;
vector<bool> vb = { true, false, false, true, true };
print("The vector is: ", vb);
// Invoke vector<bool>::reference::operator=()
vector<bool>::reference refelem1 = vb[0];
vector<bool>::reference refelem2 = vb[1];
vector<bool>::reference refelem3 = vb[2];
bool b1 = refelem1;
bool b2 = refelem2;
bool b3 = refelem3;
cout << "The original value of the 1st element stored in a bool: " << b1 << endl;
cout << "The original value of the 2nd element stored in a bool: " << b2 << endl;
cout << "The original value of the 3rd element stored in a bool: " << b3 << endl;
cout << endl;
refelem2 = refelem1;
print("The vector after assigning refelem1 to refelem2 is now: ", vb);
refelem3 = true;
print("The vector after assigning false to refelem1 is now: ", vb);
// The initial values are still stored in the bool variables and remained unchanged
cout << "The original value of the 1st element still stored in a bool: " << b1 << endl;
cout << "The original value of the 2nd element still stored in a bool: " << b2 << endl;
cout << "The original value of the 3rd element still stored in a bool: " << b3 << endl;
cout << endl;
}
The vector is: true false false true true
The original value of the 1st element stored in a bool: true
The original value of the 2nd element stored in a bool: false
The original value of the 3rd element stored in a bool: false
The vector after assigning refelem1 to refelem2 is now: true true false true true
The vector after assigning false to refelem1 is now: true true true true true
The original value of the 1st element still stored in a bool: true
The original value of the 2nd element still stored in a bool: false
The original value of the 3rd element still stored in a bool: false
vector<bool>::swap
Proxy sınıfını vector<bool>::reference
kullanarak Boole vektörlerinin ( vector<bool>
) iki öğesini değiş tokuş eden statik üye işlevi.
static void swap(
reference Left,
reference Right);
Parametreler
Left
öğesiyle Right
değiştirilecek öğe.
Right
öğesiyle Left
değiştirilecek öğe.
Açıklamalar
Bu aşırı yükleme, özel ara sunucu gereksinimlerini vector<bool>
destekler. vector
::swap, öğesinin tek bağımsız değişken aşırı yüklemesi ile aynı işleve vector<bool>::swap()
sahiptir.
Ayrıca bkz.
C++ Standart Kitaplığında İş Parçacığı Güvenliği
C++ Standart Kitaplığı Başvurusu