alder wrote:Code: Select all
void f( vector<int>& v )
{
v[0]; // A
v.at(0); // B
}
В чем разница между строчками А и Б?
А кто его знает. Не помню. Лень проверять.
По-моему, [] бросает ексептион если индекс аут оф баунд.
alder wrote:Или, вот, чуть поинтереснее:Code: Select all
vector<int> v;
v.reserve( 2 );
assert( v.capacity() == 2 );
v[0] = 1;
v[1] = 2;
for( vector<int>::iterator i = v.begin();
i < v.end(); i++ )
{
cout << *i << endl;
}
cout << v[0];
v.reserve( 100 );
assert( v.capacity() == 100 );
cout << v[0];
v[2] = 3;
v[3] = 4;
// ...
v[99] = 100;
for( vector<int>::iterator i = v.begin(); i < v.end(); i++ )
{
cout << *i << endl;
}
Что здесь неправильно? Покритикуйте стиль.
Ну во-первых, не уверен reserve ресервирует стоко скоко указано - может и больше(?) - в стандарт надо лезть, со стула вставать.
2. Not sure что корректно проверять итератор на <> а не != с begin(), end() - кто его знает, как там реализовано (есть в итераторе операторы "<>" - не припомню...). Опьять же, в стандарт лезть надо.
А что там?
P.S. reserve кстати, гарантирует сохранение данных?
Может еще чего?