2017-02-17 13 views
-1

Скажем, например, у меня есть вектор. Вектор содержит элементы i. Скажем, я хочу перебрать все позиции j в каждом элементе i вектора. Я пытаюсь использовать цикл вложенных циклов для выполнения процедуры в следующем коде. Он пытается изменить каждый элемент для все кс, например, так:Цитирование всех символов в строковом элементе строкового вектора в 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

Что-то подсказывает, что вы смотрите на ошибки * компилятора *, и что вы должны попробовать выполнить итерацию по вектору и выполнить итерацию по строке, * до * вы пытаетесь их вместе. – 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

Вектор не имеет функции 'length', он имеет' size'. – Gambit

+0

Вы правы. Измененный код (а не мои правки) намного лучше. –