C++ 在多维向量中的特定位置添加值

C++ 在多维向量中的特定位置添加值,c++,vector,C++,Vector,我无法理解如何在多维向量中的特定位置添加新元素。 我的向量是 std::vector<std::vector<char>> symbols 如何使用insert方法? 我的向量必须是动态的。当我在特定位置插入一个值时,它的维度必须改变。为了索引到多维向量中,必须完全初始化它,并且i0

我无法理解如何在多维向量中的特定位置添加新元素。 我的向量是

std::vector<std::vector<char>> symbols 
如何使用insert方法?
我的向量必须是动态的。当我在特定位置插入一个值时,它的维度必须改变。

为了索引到多维向量中,必须完全初始化它,并且i0<外向量的长度,i1<内向量的长度。假设所有内部向量大小相同。假设你想要一个10x10的向量

使用C++11:

std::vector<std::vector<char>> symbols(10, std::vector<char>(10));

这样做的第一步是在i0上检索内部向量基,从那里可以在距离开始迭代器的特定偏移处执行insert。你只需要确保索引不超过向量的长度。

为了索引到多维向量,你必须完全初始化它,并且i0<外向量的长度,i1<内向量的长度。假设所有内部向量大小相同。假设你想要一个10x10的向量

使用C++11:

std::vector<std::vector<char>> symbols(10, std::vector<char>(10));

这样做的第一步是在i0上检索内部向量基,从那里可以在距离开始迭代器的特定偏移处执行insert。您只需确保索引不超过向量的长度。

向量的问题

似乎您正试图将容器用于其未设计的用途:

向量是具有特定大小的连续元素数组。因此,您无法在给定位置添加值,如:

myVector[5] = value; // wrong if myVector.size()<6

向量的问题

似乎您正试图将容器用于其未设计的用途:

向量是具有特定大小的连续元素数组。因此,您无法在给定位置添加值,如:

myVector[5] = value; // wrong if myVector.size()<6

为了继续您所要求的内容,我理解您需要类似于矩阵的东西,但是需要在插入元素时动态增长的行和列。对于插入,您可以使用noobius建议的方法:

symbols[i0].insert(symbols[i0].begin() + i1, 'a');
正如Adrian Maire所建议的,您需要注意i0是一个有效的索引,所以

i0<symbols.capacity().
i0=symbols.capacity())
符号。调整大小(i0*mul_fct);
如果(i1>=符号[i0]。容量()
符号[i0]。调整大小(i1*mul_fct);
符号[i0]。插入(符号[i0]。开始()+i1,插入);
}
此函数执行insert(),但也检查i0和i1是否为正确的索引,如果不是,则重新分配向量本身。 为了测试程序,您可以使用如下main.cpp:

    std::vector<std::vector<wchar_t >> symbols(1);
    int index1[]={0,1}, index2[]={0,2}, index3[]={24,7};

    //insertion1
    Myinsert(symbols, index1, L'a');
    print_vec(symbols);

    //insertion2
    Myinsert(symbols, index2, L'b');
    print_vec(symbols);

    //insertion3
    Myinsert(symbols, index3, L'c');
    print_vec(symbols);

    //insertion4
    Myinsert(symbols, index3, L'z');
    print_vec(symbols);

std::矢量符号(1);
int index1[]={0,1},index2[]={0,2},index3[]={24,7};
//插入1
Myinsert(符号,索引1,L'a');
打印矢量(符号);
//插入2
Myinsert(符号,index2,L'b');
打印矢量(符号);
//插入3
Myinsert(符号,索引3,L'c');
打印矢量(符号);
//插入4
Myinsert(符号,index3,L'z');
打印矢量(符号);

为了坚持您的要求,我知道您需要类似于矩阵的东西,但行和列在插入元素时会动态增长。对于插入,您可以使用noobius建议的方法:

symbols[i0].insert(symbols[i0].begin() + i1, 'a');
正如Adrian Maire所建议的,您需要注意i0是一个有效的索引,所以

i0<symbols.capacity().
i0=symbols.capacity())
符号。调整大小(i0*mul_fct);
如果(i1>=符号[i0]。容量()
符号[i0]。调整大小(i1*mul_fct);
符号[i0]。插入(符号[i0]。开始()+i1,插入);
}
此函数执行insert(),但也检查i0和i1是否为正确的索引,如果不是,则重新分配向量本身。 为了测试程序,您可以使用如下main.cpp:

    std::vector<std::vector<wchar_t >> symbols(1);
    int index1[]={0,1}, index2[]={0,2}, index3[]={24,7};

    //insertion1
    Myinsert(symbols, index1, L'a');
    print_vec(symbols);

    //insertion2
    Myinsert(symbols, index2, L'b');
    print_vec(symbols);

    //insertion3
    Myinsert(symbols, index3, L'c');
    print_vec(symbols);

    //insertion4
    Myinsert(symbols, index3, L'z');
    print_vec(symbols);

std::矢量符号(1);
int index1[]={0,1},index2[]={0,2},index3[]={24,7};
//插入1
Myinsert(符号,索引1,L'a');
打印矢量(符号);
//插入2
Myinsert(符号,index2,L'b');
打印矢量(符号);
//插入3
Myinsert(符号,索引3,L'c');
打印矢量(符号);
//插入4
Myinsert(符号,index3,L'z');
打印矢量(符号);

看看insert gives问题,我不知道为什么“gives problem”是一个非常糟糕的问题描述。你能包括一个吗?我想你必须先正确初始化向量才能插入到一个特定的位置。否则,您可以使用
push_back()
。我可能猜数组的大小不适合您通过这些索引访问元素。数组(和向量)是连续的内存区域,因此在访问索引K时,向量中至少需要有K个元素。否则,您可以使用push_back将新元素添加到数组的末尾。请看一下insert gives问题,我不知道为什么“gives problem”是一个非常糟糕的问题描述。你能包括一个吗?我想你必须先正确初始化向量才能插入到一个特定的位置。否则,您可以使用
push_back()
。我可能猜数组的大小不适合您通过这些索引访问元素。数组(和向量)是连续的内存区域,因此在访问索引K时,向量中至少需要有K个元素。否则,您可以使用push_back将新元素添加到数组的末尾。我的向量必须是完全动态的,并且当我要插入值时,它的维度总是要更改。所以我不能选择首字母dimension@MartinaPianist96那是个可疑的设计。。它们是动态的。。。但在创建元素之前不能使用[]。插入新的“行”是一个代价高昂的操作,它会重新分配整个向量。当我要插入值时,向量必须是完全动态的,并且其维度总是要更改。所以我不能选择首字母dimension@MartinaPianist96那是个可疑的设计。。它们是动态的。。。但在创建元素并插入之前,不能使用[]