Как объявить массив строк в C ++? - PullRequest
84 голосов
/ 29 августа 2008

Я пытаюсь перебрать все элементы статического массива строк в лучшем виде. Я хочу иметь возможность объявить его в одной строке и легко добавлять / удалять элементы без необходимости отслеживать количество. Звучит очень просто, не правда ли?

Возможные не решения:

vector<string> v;
v.push_back("abc");
b.push_back("xyz");

for(int i = 0; i < v.size(); i++)
    cout << v[i] << endl;

Проблемы - нет способа создать вектор на одной строке со списком строк

Возможное отсутствие решения 2:

string list[] = {"abc", "xyz"};

Проблемы - нет способа автоматически получить количество строк (о которых я знаю).

Должен быть простой способ сделать это.

Ответы [ 15 ]

2 голосов
/ 06 сентября 2008
#include <boost/foreach.hpp>

const char* list[] = {"abc", "xyz"};
BOOST_FOREACH(const char* str, list)
{
    cout << str << endl;
}
2 голосов
/ 01 сентября 2008

Вместо этого макроса, могу ли я предложить этот:

template<typename T, int N>
inline size_t array_size(T(&)[N])
{
    return N;
}

#define ARRAY_SIZE(X)   (sizeof(array_size(X)) ? (sizeof(X) / sizeof((X)[0])) : -1)

1) Мы хотим использовать макрос, чтобы сделать его постоянной времени компиляции; результат вызова функции не является константой времени компиляции.

2) Однако мы не хотим использовать макрос, потому что макрос мог случайно использоваться в указателе. Функция может использоваться только для массивов времени компиляции.

Итак, мы используем определенность функции, чтобы сделать макрос «безопасным»; если функция существует (то есть имеет ненулевой размер), то мы используем макрос, как указано выше. Если функция не существует, мы возвращаем неверное значение.

1 голос
/ 28 января 2016

Вы можете напрямую объявить массив строк, таких как string s[100];. Затем, если вы хотите получить доступ к определенным элементам, вы можете получить его напрямую, например s[2][90]. Для итерационных целей возьмите размер строки, используя s[i].size() функция.

1 голос
/ 08 апреля 2011
#include <iostream.h>
#include <iomanip.h>

int main()
{
int n;
cout<<"enter the maximum number\n";
cin>>n;
cout<<"enter the first number\n";
for(int i=0;i<n;i++)
{

for(int j=0;j<n;j++)
{
cin>>a[i][j];
}
}
cout<<"enter the second number\n";
for(int i=0;i<n;i++)
{
for(int k=0;k<n;k++)
{
cin>>b[i][k];
}
}
cout<<"the product will be\n";
for(int i=0;i<n;i++)
{
for(int g=0;g<n;g++)
{
c[i][g]=c[i][c]*c[i][j];
cout<<setw(5)<<c[i][g];
}
cout<<endl;
}
return 0;
}
1 голос
/ 12 декабря 2009
#include <iostream>
#include <string>
#include <vector>
#include <boost/assign/list_of.hpp>

int main()
{
    const std::vector< std::string > v = boost::assign::list_of( "abc" )( "xyz" );
    std::copy(
        v.begin(),
        v.end(),
        std::ostream_iterator< std::string >( std::cout, "\n" ) );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...