簡體   English   中英

如何將項目放入const向量?

[英]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的重點。 它主要用於將參數傳遞給函數/方法,並確保它不會被修改。

如果您確實需要更改它,有兩種選擇:

  1. 制作矢量的副本並修改它。
  2. 通過const_cast刪除const。

制作副本

const std::vector<std::string>& foo;
std::vector<std::string> bar(foo);

通過const_cast刪除const

我強烈建議不要使用它,但它可能是一個選項。

假設字符串向量在作為參數傳遞給方法或函數之前被賦予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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM