Вопрос по vector, c++, boost, repeat, assign – Инициализация вектора векторов фиксированного размера с назначением форсирования

31

Имея вектор вектора с фиксированным размером,

vector v(10);

Я хотел бы инициализировать его так, чтобы он имел во всех элементах одномерный вектор с инициализированным значением (например, 1).

Я использовал Boost Assign следующим образом

v= repeat(10,list_of(list_of(1)));

и я'у нас ошибка компиляции

error: no matching function for call to ‘repeat(boost::assign_detail::generic_list)’

Не могли бы вы сказать мне, как это сделать. заранее спасибо

Ваш Ответ

4   ответа
54

Это нет использоватьboost::assign но делает то, что вам нужно:

vector<vector<int>> v(10, vector<int>(10,1));
</int></vector<int>

Это создает вектор, содержащий 10 векторовintкаждый из которых содержит 10.ints

@anibey заданный вопрос об инициализации всех элементов вектора со значением 1. Второй параметр конструктора вектора - это значение, которое нужно скопировать. Weston
Почему там ?1 anilbey
0
#include <vector>
#include <iostream>
using namespace std;


int main(){
    int n; cin >> n;
    vector<vector<int>> v(n);
    //populate
    for(int i=0; i<n; i++){="" for(int="" j="0;" j<n;="" j++){="" int="" number;="" cin="">> number;
            v[i].push_back(number);
        }
    }
    // display
    for(int i=0; i<n; i++){="" for(int="" j="0;" j<n;="" j++){="" cout="" <<="" v[i][j]="" "="" ";="" }="" endl;="" <="" code=""></n;></n;></vector<int></iostream></vector>

Входные данные:

<code>4
11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44
</code>

Выход:

<code>11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44
</code>
4

Я просто попытаюсь объяснить это новичкам в C ++. Вектор веректоровmat имеет то преимущество, что вы можете получить доступ к его элементам напрямую, почти бесплатно, используя[] оператор ..

int n(5), m(8);
vector<vector<int> > mat(n, vector<int>(m));

mat[0][0] =4; //direct assignment OR

for (int i=0;i<n;++i) for(int="" j="0;j<m;++j){" mat[i][j]="rand()" %="" 10;="" }="" <="" code=""></n;++i)></int></vector<int>

Конечно, это не единственный способ. И если вы не добавляете и не удаляете элементы, можно также использовать собственные контейнерыmat[] которые являются не чем иным как указателями. Вот'Мой любимый способ, используя C ++:

<code>int n(5), m(8);
int *matrix[n];
for(int i=0;i<n;++i){ matrix[i]="new" int[m];="" allocating="" m="" elements="" of="" memory="" for(int="" j="0;j<m;++j)" matrix[i][j]="rand()%10;" }="" <="" code=""></n;++i){></code>

Таким образом, вы ненужно использовать#include , Надеюсь, этояснее!

28

Ты ненужно использоватьboost для требуемого поведения. Следующее создаетvector из10 vectorс, с каждымvector содержащий10 ints со значением:1

std::vector<std::vector<int>> v(10, std::vector<int>(10, 1));
</int></std::vector<int>
Я думаю это'потому что он получил>> т.е.> без пробела между: p krozaine
это был первый опубликованный ответ,Это лучший ответ, и, тем не менее, он не является ни принятым, ни одобренным. вздох. жизнь нечестно. dbliss

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