19 Şubat 2016 Cuma

Vector İle Yapılan Hatalar

Vector'ün Kendisi Üzerinde Dolaşırken Ekleme Yapmak - 1
Her ekleme end() iteratorünü invalid hale getirir. Aşağıdaki kod hatalı. Zaten Visual Studio assert hatası veriyor.
#include <iostream>
#include <vector>

using namespace std;

int main()
{
  vector<int> v{3, 1, 4};

  v.reserve(6);

  for (auto e: v)
    v.push_back(e*e);

  for (auto e: v)
    cout << e << " ";

  return 0;
}
Benzer bir hata da şöyle.
int main() {
    // your code goes here
    vector<int> v;
    v.push_back(1);
    int count = 0;

    for(int elem: v){
        if(count<100)
        v.push_back(count);
        count++;
    }

    for(int elem: v)
    cout << elem << endl;

    return 0;
}
Vector'ün Kendisi Üzerinde Dolaşırken Ekleme Yapmak - 3
emplace_back iterator'leri invalid hale getirebilir. Bu da tanımsız davranışa sebep olabilir.
void use(std::string & s)
{...}

std::vector<std::string> v{"foo", "bar"};
auto & v_ref = v[0];
v.emplace_back("baz");
use2(v_ref); // Undefined Behavior

Son Eleman Hariç Dolaşmak
Vector nenesini, en son eleman hariç dolaşmak isteriz. Ancak vector boştur. Klasik bir unsigned int hatasıdır.
void fun (const std::vector<int> &vec) {
    for (std::size_t i = 0; i < vec.size() - 1; ++i)
        do_something(vec[i]);
}


Hiç yorum yok:

Yorum Gönder