нет соответствующей функции для вызова 'std :: vector> :: push_back (char &)' - PullRequest
0 голосов
/ 26 марта 2020

Я объявил строковый вектор, а также строковую переменную с некоторым значением. Когда я пытаюсь вывести sh обратно каждый символ моей строковой переменной в строковый вектор. Я получаю ошибку как. Если я изменил свой строковой вектор на символ-вектор, то код работает нормально.

Почему строковый вектор не принимает символы в методе push_back ()?

#include<iostream>
#include<vector>

int main() {
    vector<string> vec;
    string s = "hello";
    int len = vec.size();
    for(int i=0; i<len; i++) {
        vec.push_back(s[i]);
    }
}

Ошибка: нет соответствующей функции для вызова 'std :: vector> :: push_back (char &)'

Fix: vector<char> vec;

1 Ответ

1 голос
/ 26 марта 2020

Ошибка в том, что вы не можете сделать это:

std::string('a');

Или это:

string s = "hello";
std::string(s[0]);

std::string не имеет конструктора, который бы занимал один char.


Есть 3 варианта:

Храните ваши данные в std::string

Самый простой. std::string - это контейнер, очень похожий на std::vector, за исключением того, что он хранит только тип char.

Используйте std::vector<char>

Если вам нужен вектор, а не строка, это больше разумно иметь вектор из отдельных символов, а не вектор из 1-char-long-strings.
Вы можете инициализировать его либо с помощью

std::vector<char> vec(s.begin(), s.end())

, либо так, как вы это делали при попытке:

std::vector<char> vec;
std::string s = "hello";
for(int i=0; i<s.length(); i++) {
    vec.push_back(s[i]);
}

Использование std::vector<std::string>

Если вам действительно нужно использовать вектор строк, вам нужно использовать правильный std::string конструктор

std::vector<std::string> vec;
std::string s = "hello";
for(int i=0; i< s.length(); i++) {
    vec.push_back(std::string(1, s[i]));
}

Или немного более кратко с std::vector::emplace_back()

std::vector<std::string> vec;
std::string s = "hello";
for(int i=0; i< s.length(); i++) {
    vec.emplace_back(1, s[i]);
}
...