Aracılığıyla paylaş


vector<bool> Sınıfı

vector<bool> sınıfı, türündeki vectorboolöğ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 vectordavranı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ı Tanım
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 boolbir 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 Tanım
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>::referencekullanması 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>::referencekullanması 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>::referencekullanması dışında, özelleştirilmemiş vector::back işleviyle aynı işlevi görür. Ayrıca bkz. operator[].

Proxy Sınıfı

Ad Tanım
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.

İade 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;

İade 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>::referencekullanarak 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