Функция для возврата SQL-запроса в вектор <double>в C ++ - PullRequest
2 голосов
/ 07 июля 2011

У меня есть запрос в T-SQL, который возвращает 300 записей.Каждая запись имеет 2 столбца (date, int)

Какой самый простой способ в C ++ поместить все даты в один вектор и все целые числа в другой?

Я хотел бы сделатьэто в функции.

1 Ответ

1 голос
/ 07 июля 2011

Трудно предоставить полный код, не зная вашей клиентской библиотеки SQL - это влияет на то, как вы заполняете vector s, но в основном вы перебираете строки, считанные из БД, делая push_back на ваших двух vector s длязначения, полученные в каждой строке.

Основной вопрос: как вы собираетесь обрабатывать возвращаемые параметры?У вас есть два vector с, как вы указали здесь проблему.Вы могли бы добиться этого, если бы вызывающая сторона создала vector s, а затем функция заполнила их, например:

#include <vector>

// function declaration - return false on error, or throw exception if preferred
bool populate(std::vector<double>& dates, std::vector<int>& values);

// calling code
std::vector<double> myDates;
std::vector<int> myValues;

// if you know the row count is 300 ahead of time, do this
unsigned int rowCount;

// rowCount gets set up, to 300 in this example
myDates.reserve(rowCount);
myValues.reserve(rowCount);

// Populate vectors, checking for error (false = error)
if (populate(myDates, myValues)) {
  // work with the returned data
}

Для дополнительного кредита из-за лучшей инкапсуляции или данных строки, я был бы склонениспользовать вектор структур POD.Преимущество этого состоит в том, что каждая дата и значение остаются тесно связанными - вы можете расширить это до полноценного класса, если у вас есть операции, которые вы хотите выполнить для каждой строки.Скрывайте данные за получателями, желательно.

struct Row {
  public:
    double date;
    int value;
};

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