vector<list<Nodo<string>*>> lista;
我有這個串列向量,我正在嘗試撰寫一種將元素插入其中的方法
template <typename T> void HashRBT<T>:: riempimento()
{
for(auto &it:vett_dati)
{ int key=it.first;
string value=(it.second);
int id=hashFunctionDivsion(key);
Nodo<T> *x=rb->searchNodo(rb->getRoot(),id);
if(x==rb->getNillT())
{
rb->insertNodoRB(id,value);
}
else {
lista.resize(getDim());
Nodo<T> *y= new Nodo<T>(id,value);
lista.at(id).push_front(y); //inserimento in testa
}
}
Print_Lista();
}
現在在 else 塊中是我在這個串列向量中插入元素的地方,但我不明白為什么如果我評論 resize 陳述句這不起作用并且我收到如下錯誤:vector :: _ M_range_check。我希望有人向我解釋記憶體中發生了什么?我在調整大小時分配了什么?
uj5u.com熱心網友回復:
分解問題并在沒有 rb 樹邏輯的情況下查看它。
std::vector<int> vec{10,20}; // vector of size 2
vec.at(0); // fine: element 0 exists.
vec.at(1); // fine: element 1 exists.
vec.at(2); // will throw because vector has size 2, so only elements 0 and 1
vec.resize(3); // now vector has size 3: elements 0, 1, 2
vec.at(2); // fine: element 2 exists.
無論您將 aint還是 a存盤在其中,對于' 的基本邏輯std::list<Node<T>>而言都無關緊要。std::vector
std::vector::at所以,如果你訪問一個不存在的元素,你會得到一個錯誤:
std::out_of_range如果!(位置 < 大小())。
同樣,std::vector::operator[]不會作業,但會默默地失敗。省略檢查具有性能優勢。
與 std::map::operator[] 不同,此運算子從不向容器中插入新元素。通過此運算子訪問不存在的元素是未定義的行為。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/521612.html
標籤:C 列表c 11向量
下一篇:在C 中確定陣列中的重復項/對
