Re: [問題] 用指標指向vector的element?
這篇文是2010年發的,因為最近遇到相似的問題想來請教。
我正在練習merge sort,用C很好寫,原始碼在此:
https://gist.github.com/gnitnaw/6ab90fbad5b2c07cb28fbe4b42ae3306
用divide & conquer的步驟是這樣:
array size >=3的話,拆兩半,這個用pointer很簡單,
就把它變成兩個pointer,一個擺array[0],另一個擺array[N/2]。
可是如果用C++改寫就不一樣了。
由於array size很大,如果用vector,由於它可能不是連續空間,
我不能用pointer或reference把vector分成兩半。
就變成只能用copy vector的方式(那我得copy log_2(100000)次....)
還是我能用new一個size = 100000的array?
不知道C++的array是不是連續空間?可不可以用pointer指向該array中的某元素?
對C++11以後仍然不是很熟,還在練習中(汗),請多指教。
PS: 我知道C++還是可以用C的語法,不過我想儘可能用C++11以後的語法。
※ 引述《zxvc (執著)》之銘言:
: 我想讓"指標""一直"指向某個vector的元素,
: 請問有無可能。
: 事實上這在VC是不行的。
: 我知道vector可能發生reallocate memory的情形。
: 所以就算某個指標某個時候指向vector的一個element,
: 一旦有reallocate的情形(如某次push_back),
: 就不再保證指向同一個element。例如以下code在VC會出現執行時期錯誤:
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: #include<iostream>
: #include<vector>
: int main()
: {
: vector<int> v;
: v.push_back(0);
: int *p = &(*(v.begin()));
: v.push_back(1);
: cout<<*p; // error!
: }
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: #include<iostream>
: #include<vector>
: int main()
: {
: vector<int> v;
: v.push_back(0);
: vector<int>::iterator p = v.begin();
: v.push_back(1);
: cout<<*p; // error!
: }
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: 甚至不用指標,改用iterator,也一樣會出問題。
: 所以請問除了指標、iterator,難道只剩index可以一直指向vector同一個element嗎?
: index的用法如:
: int p = 0;
: cout<<v[p];
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 86.209.24.41
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1466276791.A.294.html
※ 編輯: wtchen (86.209.24.41), 06/19/2016 03:08:36
推
06/19 03:40, , 1F
06/19 03:40, 1F
推
06/19 03:49, , 2F
06/19 03:49, 2F
→
06/19 04:17, , 3F
06/19 04:17, 3F
推
06/19 05:59, , 4F
06/19 05:59, 4F
推
06/19 07:02, , 5F
06/19 07:02, 5F
推
06/19 07:59, , 6F
06/19 07:59, 6F
推
06/19 09:16, , 7F
06/19 09:16, 7F
→
06/19 10:28, , 8F
06/19 10:28, 8F
→
06/20 15:10, , 9F
06/20 15:10, 9F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):