2017-02-17 73 views
-1

例如,我有一個向量。該向量包含i項。假設我想遍歷矢量中每個元素i中的所有位置j。我嘗試使用嵌套for循環來執行下面的代碼中的過程。它試圖將每一個元素更改爲所有KS,就像這樣:循環遍歷C++中的字符串向量的字符串元素中的所有字符

vector<string> strvec; 
strvec.push_back("Dog"); 
strvec.push_back("Cat"); 

for (int i = 0; i < strvec.length; i++) 
{ 
    for (int j = 0; j < strvec[i].length; j++) 
    { 
     strvec[i][j] = 'k'; 
    } 
} 

當以這種方式使用的循環,上面的代碼會得到錯誤信息,甚至在嵌套循環的代碼之前(啓動之初嵌套循環)。有沒有一種方法可以遍歷字符串向量中的每個元素中的每個字符,這是有效的,並且可行?

+0

如果它得到「錯誤信息」,那麼*請*添加這些問題。 – tadman

+1

考慮使用'strvec.size()'代替'strvec.length' –

+0

有些東西告訴我你正在查看* compiler *錯誤,並且你應該嘗試遍歷一個向量,並迭代一個字符串,* before *你一起嘗試。 – Beta

回答

1

下面是一個使用引用和for基於範圍的一種方法。任何時候你必須從頭開始迭代一個容器,首先嚐試基於範圍的for。它不像手動控制那樣多才多藝,但真的很難弄錯。

for (string & str: strvec) 
{ 
    for (char & ch: str) 
    { 
     ch = 'k'; 
    } 
} 
0

std::vector具有size功能,您可以使用迭代:

for (std::size_t i = 0; i < strvec.size(); i++) 
{ 
    for (std::size_t j = 0; j < strvec[i].size(); j++) 
    { 
     strvec[i][j] = 'k'; 
    } 
} 
+0

我在參考文獻中沒有看到'length'作爲'vector'的成員。但我承認你的名字,並且傾向於遵從你。 –

+0

矢量沒有「長度」功能,它有'尺寸'。 – Gambit

+0

你是對的。編輯的代碼(不是我的編輯)好得多。 –