Быстрый способ заполнить вектор, карту, и установить, с помощью stl функции

Мне не ясно, почему в каждом списке должны быть только нули. Однако присвоение элементов вставленным именам является головной болью в R. Вы должны использовать функцию assign и указать среду. Примерно так.

for(i in 1:2){
  values <- list(1:i)
  assign(x = paste0("List_", i), value = values, envir = globalenv())
}

List_1
[[1]]
[1] 1
List_2
[[1]]
[1] 1 2
5
задан 13 March 2009 в 13:10
поделиться

4 ответа

Если Вы уже имеете наложение исходных данных вокруг, говорите в массиве стиля C, не забывайте, что эти контейнеры STL имеют "конструкторов с 2 итераторами".

const char raw_data[100] = { ... };

std::vector<char> v(raw_data, raw_data + 100);

Править: Меня попросили показать пример для карты. Это не часто, у Вас есть массив наложения пар вокруг, но в прошлом я создал сценарий Python, который генерировал массив пар из файла необработанных данных. Я затем #include эта сгенерированная кодом структура и initalized карта с ним как это:

#include <map>
#include <string>
#include <utility>

using namespace std;

typedef map<string, int> MyMap;

// this array may have been generated from a script, for example:
const MyMap::value_type raw_data[2] = {
   MyMap::value_type("hello", 42),
   MyMap::value_type("world", 88),
};

MyMap my_map(raw_data, raw_data + 2);

Кроме того, если у Вас есть массив ключей, и и массив значений данных, можно циклично выполниться по ним, звоня map.insert (make_pair (ключ, значение));

Вы также спрашиваете о memset и векторе. Я не думаю, что существует любая реальная заслуга к использованию memset для инициализации вектора, потому что векторам можно дать начальное значение для всех их элементов через конструктора:

vector<int> v2(100, 42);  // 100 ints all with the value of 42
vector<string> v(42, "initial value");   // 42 copies of "initial value"
3
ответ дан 18 December 2019 в 07:32
поделиться

Можно использовать std::fill или std::generate.

5
ответ дан 18 December 2019 в 07:32
поделиться
  • библиотека присвоения повышения путем (http://www.boost.org/doc/libs/1_38_0/libs/assign/doc/index.html)

    использование повышения пространства имен:: присвойтесь;
    станд.:: вектор <интервал> v;
    v + = 1,2,3,4,5,6,7,8,9;

    станд.:: карта <станд.:: строка, интервал> m;
    вставьте (m) ("Панель", 1) ("Нечто", 2);

    вектор <интервал> v;
    v + = 1, 2, repeat_fun (4, &rand), 4;

  • станд.:: генерируйте или станд.:: generate_n

  • станд.:: backinserter - иногда будет помогать Вам
12
ответ дан 18 December 2019 в 07:32
поделиться

Я использую пользовательские операторы для вставки данных:

#include <vector>
#include <iostream>
#include <string>

using namespace std;

template <class T>
vector<T>& operator<<(vector<T>& vec, const T& x) {
    vec.push_back(x);
    return vec;
}

vector<string>& operator<<(vector<string>& vec, char* cstr) {
    string s(cstr);
    vec.push_back(s);
    return vec;
}

int main() {
    vector<int> foo;
    vector<string> bar;
    foo << 7 << 8 << 9 << 10;
    bar << "foo" << "bar" << "baz";
}
1
ответ дан 18 December 2019 в 07:32
поделиться
Другие вопросы по тегам:

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