[問題] vector 使用問題

作者: NTUmaki (西木野真姬)   2020-09-07 12:34:59
開發平台(Platform): (Ex: Win10, Linux, ...)
mac
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
c17
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
null
問題(Question):
想要 new vector<int>() 之後 access vector
餵入的資料(Input):
null
預期的正確結果(Expected Output):
1
錯誤結果(Wrong Output):
沒有運算子 "=" 符合這些運算元
作者: oToToT (屁孩)   2020-09-07 13:01:00
1.你應該誤會vector怎麼用了吧,我猜你要的只是vector<int> v(5),不需要用new的2. vector底層實作基本上就是array,能夠O(1) push_back原因則是他會自動在底層陣列滿的時候自動再重新把陣列變大,但這樣做複雜度均攤下來還是好的(無關的部分:可以問用圖存set該怎麼做嗎?
作者: james732 (好人超)   2020-09-07 14:10:00
https://bit.ly/35gCesP 看看這篇有沒有幫助?你需要的可能是先預留空間?
作者: steve1012 (steve)   2020-09-07 15:09:00
v是pointer to vector. 並沒有告訴你會直接指到underlying data.
作者: moebear (萌熊)   2020-09-07 15:12:00
直接改寫的話 你得用(*v)[2]=1;
作者: descent (「雄辯是銀,沉默是金」)   2020-09-07 15:24:00
你需要 "C++ 標準庫", 買一本來參考書上用了 11 頁在說明 vector, 應該可以解除你的疑惑你如果是要理解內部實作, 那要找 "stl 源碼剖析" 這本書
作者: kaneson (Lance)   2020-09-07 15:54:00
樓上 *v正解
作者: a58524andy (a58524andy)   2020-09-07 16:41:00
disjoint set沒ordering吧(? 可是associative containners的iterator traversal要參照其key的ordering加上標準也有指定一些複雜度限制可能是因為這樣所以常見的都用rb-tree
作者: kaneson (Lance)   2020-09-07 16:56:00
v本身是pointer, 不能把它當vector去access, c的pointer可以操作 v[2] 只是語法糖,不適用vector, (*v)[2] 或 v->at(2) 才正確
作者: oToToT (屁孩)   2020-09-07 22:03:00
說實在我還是不知道要怎麼用disjoint set當作set,是我誤會了甚麼嗎@@,應該說這兩者根本沒關吧,而且disjoint set其實也是棵樹我覺得正確的說法應該是v[??]後的type是vector<int>,所以你讓他=2是完全沒有道理的,普通的陣列int *a; a[?]的type是int,那這時候=2當然是合法的操作
作者: smartclever (超音速の騎士)   2020-09-11 17:51:00
這...應該用個v.resize()就解決了吧...

Links booklink

Contact Us: admin [ a t ] ucptt.com