Как получить доступ к различным членам вектора в функции - PullRequest
2 голосов
/ 23 ноября 2011
#include <vector>

int main()
{
   vector <class> abc;
}

при нажатии какой-либо клавиши

vector.push_back(class());

каждая петля

draw(vector)// what should the parameters be?

функция рисования

draw(vector,sizeofvector)
{
    for (int x=0;x< sizeofvector;x++)
    {draw vector[x];}
}

как должны выглядеть параметры? я должен передавать * abc?

Ответы [ 4 ]

5 голосов
/ 23 ноября 2011

В современном C ++ на это можно ответить, не исправляя ошибок:

for (const auto & x : vector) { draw(x); }

В качестве альтернативы (все еще в C ++ 11):

for (auto it = vector.cbegin(), end = vector.cend(); it != end; ++it)
{
  draw(*it);
}

Это также может работать в C ++ 98/03:

for (std::size_t i = 0, end = vector.size(); i != end; ++i) { draw(vector[i]); }
4 голосов
/ 23 ноября 2011

Если вы не собираетесь изменять вектор, вы обычно передаете его по константной ссылке.

void draw(const std::vector<T>& v)
{
    for (int x = 0; x < v.size(); x++)
    {
        // draw v[x];
    }
}

Вы также можете использовать итераторы (это часто предпочтительнее).

void draw(const std::vector<T>& v)
{
    for (std::vector<T>::const_iterator x = v.begin(); x != v.end(); ++x)
    {
        // draw *x;
    }
}

Причина, по которой вы не передаете его по значению (draw(std::vector<T> v)), заключается в том, что это приведет к тому, что весь вектор будет копироваться при каждом вызове функции, что, очевидно, невероятно неэффективно. Ссылки означают, что вы просто ссылаетесь на существующий вектор, а не создаете новый.

0 голосов
/ 23 ноября 2011
#include <algorithm>
#include <vector>
#include <iostream>

void addOne(int& value)
{
    value++;
}

void print(int& value)
{
    std::cout << value;
}

int main()
{
    std::vector<int> myVector;
    myVector.push_back(1);
    myVector.push_back(2);
    myVector.push_back(3);
    std::for_each(myVector.begin(), myVector.end(), addOne);
    std::for_each(myVector.begin(), myVector.end(), print);
}

Выход: 234

написано от руки, возможны ошибки компилятора

0 голосов
/ 23 ноября 2011

std :: vector - это тип.Вам нужно передать экземпляр, поэтому в вашем случае:

draw(abc);

Я также согласен, что ваша функция должна иметь прототип:

void draw( const std::vector<class> & v );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...