создание динамического массива строк 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::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]