我一直在嘗試使用指向數組來指向矢量,但是,至今我已經能夠實現這些矢量,但試圖將元素添加到其中一個子向量,我在運行時重複出現未知錯誤。從C++中的指針數組向元素添加元素
我以前定義我的數組作爲這樣:
std::vector<std::string> *frequency_table[10000];
我然後嘗試將元素添加到載體中的特定一個。這是導致運行時錯誤的行。
frequency_table[index]->push_back(value);
任何想法?
我一直在嘗試使用指向數組來指向矢量,但是,至今我已經能夠實現這些矢量,但試圖將元素添加到其中一個子向量,我在運行時重複出現未知錯誤。從C++中的指針數組向元素添加元素
我以前定義我的數組作爲這樣:
std::vector<std::string> *frequency_table[10000];
我然後嘗試將元素添加到載體中的特定一個。這是導致運行時錯誤的行。
frequency_table[index]->push_back(value);
任何想法?
乍一看,問題看起來像你沒有爲指針分配任何內存,所以無處可去。雖然我不能確定沒有錯誤信息。
如果是這樣的話,但是你需要使用new
分配內存
我認爲你是正確的,缺乏初始化是問題。我應該簡單地做 std :: vector
@vtleavs這將是一個語法錯誤。你必須決定是否要有一個向量塊(在這種情況下根本不使用指針),或者是否需要10000個獨立的向量,只有在需要時纔會創建它們(在這種情況下,初始化指針到'nullptr',然後在你第一次使用它時調用'new')。 –
你的方法涉及混合向量(和向量是一件好事)和指向對象的C風格數組指針(由於代碼中已經有載體,所以出現混淆)。
如果你想串的載體的10000個載體,然後只寫
std::vector<std::vector<std::string> > frequency_table(10000);
. . .
frequency_table[index].push_back(value);
第一行聲明一個vector
,其中的每個元素是vector<string>
,分配10000個元素,並初始化每個元素。
您的開場白有點令人誤解。靜態大小的向量數組沒有任何問題。假設你知道你有10000個未知數量的元素列表。這是指向'矢量'的指針,變得很奇怪,這不是C風格的東西。一個有經驗的C程序員和一個經驗豐富的C++程序員一樣可能會去看看這個,「指向列表的指針?呃爲什麼?」 – user4581301
基本上你說我應該使用向量的矢量而不是向量的數組? – vtleavs
@ user4581301:你有一點。我會重新說出這句話,謝謝。 – kkm
使用從你們的投入,我意識到,我的問題是載體沒有被初始化,所以我才加入這個循環在循環中,我填充載體,和現在的工作:
for(int i = 0; i < 5000; ++i)
{
frequency_table[i] = new std::vector<std::string>;
}
最終的代碼如下所示:
for(int i = 0; i < 5000; ++i)
{
frequency_table[i] = new std::vector<std::string>;
}
for(auto itr = frequency_map.begin(); itr != frequency_map.end(); ++itr)
{
std::string key = itr->first;
double value = itr->second;
frequency_table[(int)value]->push_back(key);
}
謝謝大家!
PS我減半10000出於測試目的
你有一個指針數組 - 但沒有證據,你所做的這些指針實際上指向有效的'VECTOR'實例。 'frequency_table'在哪裏以及如何初始化? –
沒有上下文很難分辨,但這聽起來像是有些東西超出了範圍。你可以發佈你的一些代碼嗎? – DJMcMayhem
Igor Tandetnik更可能是正確的,沒有什麼可以擺脫範圍,但這是沒有意義的。這個問題無法在當前狀態下回答。任何人都可以做的最好的事情就是猜測併發揮勝算。更多信息,[最好是MCVE](http://stackoverflow.com/help/mcve),是必需的 – user4581301