создание динамического массива строк c++

Я строю очень простой вопрос. Я хочу динамически создавать массив строк в c++.

как я могу это сделать ?

это моя попытка:

#include <iostream>
#include <string>
int main(){
    unsigned int wordsCollection = 6;
    unsigned int length = 6;

    std::string *collection = new std::string[wordsCollection];
    for(unsigned int i = 0; i < wordsCollection; ++i){
        std::cin>>wordsCollection[i];
    }
    return 0;    
}

но это дает следующую ошибку

error C2109: subscript requires array or pointer type

в чем ошибка ?

а также, если я получаю номер ввода от пользователя, от std::cin могу ли я создать массив такого размера статически ?

6 ответов


это значит:

std::cin>>collection[i];

и delete[] collection (или вы пропустите эту память).

было бы лучше использовать std::vector<std::string> collection; и избегайте использования необработанного указателя в целом:

#include <iterator>
#include <iostream>
#include <string>
#include <vector>

int main()
{
    const unsigned int wordsCollection = 6;

    std::vector<std::string> collection;
    std::string word;
    for (unsigned int i = 0; i < wordsCollection; ++i)
    {
        std::cin >> word;
        collection.push_back(word);
    }

    std::copy(collection.begin(),
              collection.end(),
              std::ostream_iterator<std::string>(std::cout, "\n"));
}

использовать std::vector<string> или std::list<string> за руку, бросил ее.


Я думаю, что должно быть:

std::cin >> collection[i];

Я думаю, что это простая опечатка. std::cin>>wordsCollection[i] должно быть std::cin>>collection[i].


попробуйте следующее:

#include <vector>
#include <string>
#include <iostream>

int main(int argc, char* argv[])
{
    std::vector<std::string> myStrings;
    myStrings.push_back(std::string("string1"));
    myStrings.push_back(std::string("string2"));

    std::vector<std::string>::iterator iter = myStrings.begin();
    std::vector<std::string>::iterator end = myStrings.end();
    while(iter != end)
    {
        std::cout << (*iter) << std::endl;
        ++iter;
    }
    return 0;
}

вы получаете эту ошибку, потому что пытаетесь получить доступ к элементам int (т. е. wordsCollection), а не массив int (т. е. collection). То, что вы должны писать

std::cin>>collection[i]