簡體   English   中英

將現有數組的所有值設置為“幻數”

[英]Set all values of an existing array to “magic numbers”

所以我知道我可以在構造時將數組的每個值設置為“幻數”(在本例中為魔術字符串);

string * myArray[] = {"foo", "bar", "baz"};

如果我可以聲明我的數組,那將是有用的;

string * myArray[100];

然后(在if語句中)設置其值;

myArray = {"foo", "bar", "baz"};

(實際的數組將包含~30個魔術字符串,因此我不想一次分配所有字符串)

我知道魔術數字(或魔術字符串)並不好。 然而,我工作的系統是CERN的根,它充滿了有趣的怪癖,我寧願不再浪費時間尋找更整潔的方法。 因此,為了不讓完美成為善的敵人,我將使用魔法數字。

這里最快的選擇是什么?

編輯; 接受的答案適用於c ++ 11。 如果像我一樣,你沒有這個選擇,那么這是一個非常討厭但功能性的解決方案。 (有感情的程序員請保護你的眼睛。)

int numElements;
vector<char *> myArray;
if(someCondition){
  numElements = 3;
  string * tempArray[] = {"foo", "bar", "baz"}]
  for(int n = 0; n < numElements; n++){
    const char * element = (tempArray[n]);
    myArray.push_back(element);
  }
}else if(anoutherCondition){
//More stuff
}

雖然內置數組不允許聚合賦值,但std::vector允許你這樣做:

vector<string> data;
if (someCondition) {
    data = {"quick", "brown", "fox"};
} else {
    data = {"jumps", "over", "the", "lazy", "dog"};
}

演示。

這種方法有幾個優點:

  • 語法緊湊直觀
  • 允許分配的聚合具有不同的長度
  • 分配給std::vector資源會自動釋放。

我想你可能是指一個std::string數組,而不是像這樣的std::string*數組:

std::string myArray[] = {"foo", "bar", "baz"};

我這樣做的方法是允許std::vector為我管理數組。 這使我可以在以后輕松復制,移動或交換新值:

std::vector<std::string> myVector = {"foo", "bar", "baz"};

myVector = {"wdd", "ghh", "yhh"};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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