Калькулятор квот API YouTube может быть сложным, поэтому они создали калькулятор
API данных YouTube (v3) - калькулятор квот
Этот инструмент позволяет Вы оцениваете стоимость квоты для запроса API. Все запросы API, в том числе недействительные запросы, облагаются квотой как минимум в один балл.
Чтобы использовать инструмент, выберите соответствующий ресурс, метод и значения параметров детали для вашего запроса, и приблизительная стоимость квоты отобразится в таблице. Помните, что стоимость квот может изменяться без предупреждения, и приведенные здесь значения могут быть неточными.
blockquote>Стоимость соответствует вашей квоте, найденной в консоли разработчика
Я не уверен, что понимаю, что вы под валютой API YouTube - это бесплатный API, который ничего не стоит использовать.
Вот альтернативное решение:
#include <vector>
static std::vector<int> myVector(4,100);
bool init()
{
myVector[0] = 42;
return true;
}
bool initresult = init();
int main()
{
;
}
Или просто создайте функцию и вызовите ее:
std::vector<int> init()
{
...
}
static std::vector<int> myvec = init()
Возможно, немного неэффективно, но это может не иметь значения для вас сейчас, и с C ++ 0x и перемещением это будет очень быстро.
Если вы хотите избежать копирования (для C ++ 03 и более ранних версий), используйте умный указатель:
std::vector<int>* init() {
return new std::vector<int>(42);
}
static boost::scoped_ptr<std::vector<int>> myvec(init());
Попробуйте это:
static int init[] = { 1, 2, 3 };
static vector<int> vi(init, init + sizeof init / sizeof init[ 0 ]);
Также см. std :: generate
(если вы хотите инициализировать внутри функции).
C ++ 0x разрешит списки инициализаторов для стандартных контейнеров, точно так же как агрегаты:
std::vector<int> bottles_of_beer_on_the_wall = {100, 99, 98, 97};
Очевидно, еще не стандарт, но он предположительно поддерживается из GCC 4.4. Я не могу найти документацию для этого в MSVC, но Херб Саттер говорит, что их поддержка c ++ 0x впереди комитета ...
Вы можете использовать Boost, разделенный запятыми список .
Немного хакерски, но вы можете сделать это:
struct MyInitializer {
MyInitializer() {
myVector[0]=100;
//...
}
} myInitializer; // This object gets constructed before main()
Вместо того, чтобы использовать глобальный, я бы посоветовал лучше использовать локальную статическую. Поскольку инициализация вашего вектора происходит до того, как будет введено main, любые сгенерированные исключения не будут перехвачены main. Например, у вас есть тип, который при его создании может вызвать исключение:
class A {
public:
A() {
// ... code that might throw an exception
}
};
Для следующей инициализации try / catch в теле main не будет перехватывать исключение, выданное конструктором, и поэтому ваша программа просто умрет немедленно, и вы, вероятно, даже не сможете использовать отладчик, чтобы найти причину!
std::Vector<A> v(5, A()); // May throw an exception here not caught by main
int main () {
try {
// Exception for 'v' not handled here.
}
catch (...) {
}
}
Альтернативный подход, который поймает исключение из конструктора, - это использование локальной статики - которая инициализируется с использованием метода, предложенного этим ответ .
std::Vector<A> init (); // Returns a vector appropriately initialized
std::vector<A> & getV () {
static std::vector<A> cache = init();
return cache;
}
int main () {
try {
getV().at[0]; // First call to getV - so initialization occurs here!
}
catch (...) {
}
}
Обернуть его по классу:
class SpecialVector
{
public:
SpecialVector()
{
myVector[0] = 1;
myVector[1] = 4;
// etc.
}
const vector<int> & GetVector() const
{
return myVector;
}
private:
vector<int> myVector;
};
static SpecialVector SpVec;
int main() {
}