Литералы вектора C++ или что-то как они

Это ваша проблема:

@communities = Community.find(params[:id])

И вот почему:

<% @communities.each do |lnk| %>
  <li><%= link_to lnk.name,  community_path(lnk.id) %></li>
<% end %>

find возвращает одну запись (экземпляр Community), а не коллекцию. each перебирает коллекцию.

Вы, вероятно, хотите что-то вроде этого:

@community = Community.find(params[:id])
@communities = Community.all
26
задан Chris Conway 16 April 2009 в 21:55
поделиться

3 ответа

В C ++ 0x вы сможете использовать желаемый синтаксис:

vector<vector<vector<string> > > vvvs = 
    { { {"x","y", ... }, ... }, ... };

Но в сегодняшнем C ++ вы ограничены использованием boost.assign , который позволяет вы делаете:

vector<string> vs1;
vs1 += "x", "y", ...;
vector<string> vs2;
...
vector<vector<string> > vvs1;
vvs1 += vs1, vs2, ...;
vector<vector<string> > vvs2;
...
vector<vector<vector<string> > > vvvs;
vvvs += vvs1, vvs2, ...;

... или используете контейнеры Qt , которые позволяют вам сделать это за один раз:

QVector<QVector<QVector<string> > > vvvs =
    QVector<QVector<QVector<string> > >() << (
        QVector<QVector<string> >() << (
            QVector<string>() << "x", "y", ...) <<
            ... ) <<
        ...
    ;

Другой полусумный вариант, по крайней мере для плоских векторов, состоит в создании из массива :

string a[] = { "x", "y", "z" };
vector<string> vec(a, a + 3);
39
ответ дан 28 November 2019 в 07:10
поделиться
5
ответ дан 28 November 2019 в 07:10
поделиться

По сути, для этого нет встроенного синтаксиса, поскольку C ++ не знает о векторах ether; они просто из удобной библиотеки.

Тем не менее, если вы загружаете сложную структуру данных, вам все равно следует загрузить ее из файла или чего-то подобного; в противном случае код слишком хрупкий.

4
ответ дан 28 November 2019 в 07:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: