C ++: преобразовать строку в вектор, где каждый элемент является вектором этого символа - PullRequest
0 голосов
/ 30 апреля 2018

Есть ли способ в C ++ преобразовать строку в вектор вектора символов? В настоящее время я делаю это:

std::string guide = "ACGCAC"; 
std::vector< std::vector<char> > word(guide.begin(), guide.end());

Однако обычные способы индексации (с использованием .at ()) и настройки не работают. Если я попытаюсь установить элемент с этим вектором в другой вектор (см. Ниже), он не будет работать.

word[loc] = bases; //where bases = std::vector<char> and loc = int 

Я пытаюсь сделать эквивалент кода Python ниже, но на C ++. Спасибо за понимание.

word = [[letter] for letter in guide]

1 Ответ

0 голосов
/ 30 апреля 2018

Это:

std::vector<std::vector<char>> word(guide.begin(), guide.end());

Не делает то, что вы думаете, что делает. Вы хотите, чтобы каждый char в guide использовался для создания vector размера 1, содержащего этот единственный char. Но на самом деле это попытка построить vector из , который char - и на самом деле для этого есть конструктор: # 3 :

explicit vector( size_type count, const Allocator& alloc = Allocator() );

То есть для вашего первого персонажа, 'A', вы не строите вектор, содержащий символ 'A', вы создаете вектор, содержащий 65 '\0' с. Это потому, что char неявно конвертируется в size_t.

Просто сделайте то, что вы хотите сделать вручную:

std::vector<std::vector<char>> as_individual(std::string const& s) {
    std::vector<std::vector<char>> v;
    v.reserve(s.size());
    for (char c : s) {
        v.push_back({c});
    }
    return v;
}
...