2017-02-17 63 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

你是对的。编辑的代码(不是我的编辑)好得多。 –