[英]How do I put items into a const vector?
我一直在嘗試一些不同的方法,但我無法弄清楚。 我得到的聲明是:
const std::vector<std::string>&,
我一直試圖這樣做:
gradeReported.push_back(firstEntry);
我一直在收到錯誤。 我很確定它與向量的const性質有關。 幫助將不勝感激!
你沒有。 如果是const
,則無法修改。 您需要制作副本或通過非const引用來獲取它。
您不能將項目放入const向量中,向量狀態是它所包含的項目,向向量添加項目會修改該狀態。
如果要附加到矢量,則必須使用非常量參考。
void f(std::vector<int>& v)
{
v.push_back(4);
}
如果你有一個const
向量,這意味着你只能從該向量中讀取元素。
使用const
限定符時,相同的規則適用於任何其他類型的向量。
為了能夠修改它,您將需要復制原始向量或采用非const引用。
const向量的重點是你無法修改它。 向其添加元素將是一種修改,因此違反了其常量。 這就是為什么你不能這樣做的原因。 這是設計的。
你不應該能夠改變它,這就是const的重點。 它主要用於將參數傳遞給函數/方法,並確保它不會被修改。
如果您確實需要更改它,有兩種選擇:
const std::vector<std::string>& foo;
std::vector<std::string> bar(foo);
我強烈建議不要使用它,但它可能是一個選項。
假設字符串向量在作為參數傳遞給方法或函數之前被賦予const保護,並且底層類型實際上不是const
,那么可以執行以下操作:
typedef std::vector<std::string> string_vector;
void f(const string_vector& foo) {
const string_vector& foo;
const_cast<string_vector>(foo).push(firstEntry);
}
int main() {
string_vector foo();
f(foo);
}
你必須在你的聲明中刪除const,或者如果不可能使用它
const_cast<std::vector<std::string>& >(gradeReported).push_back(firstEntry);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.