插入矢量并调整其大小
Insert and resize a vector of vector
如何调整包含整数值的向量的大小。
std::vector<std::vecotr<int>> MyVector;
int value = 10;
//need to insert values as 2 rows and 3 columns, like
//Myvector[0][0] = value;
//Myvector[0][1] = value;
//Myvector[0][2] = value;
//Myvector[1][0] = value;
//Myvector[1][1] = value;
//Myvector[1][2] = value;
// ......
//here i have to resize the vector size to 4 rows and 5 cols using resize() function.
MyVector.resize(.......); //Hoe is this possible.
第一个问题是,我必须将值插入为2行3列。如何使用push_back
函数来实现此目的。之后需要调整大小到指定的大小。由于它是一个向量中的一个向量,我开始担心这个。
您可以将向量的向量看作一个矩阵,其中成员向量是"行"。
int main()
{
std::vector<std::vector<int> > MyVector;
//Create a row:
std::vector<int> subVector;
subVector.push_back(1);
subVector.push_back(2);
//put the row into the vector:
MyVector.push_back(subVector);
//create another row:
subVector.clear();
subVector.push_back(3);
subVector.push_back(4);
//put the second row into the vector
MyVector.push_back(subVector);
//access the first row and add an element to it:
MyVector[0].push_back(6);
//access the second row and add an element to it:
MyVector[1].push_back(6);
}
您可以初始化向量以包含两个向量,每个向量表示一行。每一个都可以初始化为包含3个元素,表示列:
std::vector<std::vecotr<int>> MyVector(2, std::vector<int>(3));
然后你可以通过推回新行来调整它的大小:
// add a row
MyVector.push_back(std::vector<int>(3));
要添加列,您可以向每一行push_back,使用辅助函数可以更好地实现这一点
void appendColumn(std::vector<int> v);
我认为通过编写一个包装类可以更好地管理这一切,这样你就可以很容易地确保所有向量的维度都与NxM矩阵一致。
您可以将MyVector
作为vector
的vector
的包装类。您可以定义自己的调整大小操作。在这种情况下,我将其定义为在访问向量时延迟调整列的大小。
struct MyVector {
std::vector< std::vector<int> > vec_;
size_t cols_;
struct MySubVector {
const MyVector &outer_;
std::vector<int> &vec_;
MySubVector (MyVector &outer, std::vector<int> &vec)
: outer_(outer), vec_(vec) {}
int & operator [] (int i) const {
vec_.resize(outer_.cols_);
return vec_[i];
}
};
MySubVector operator [] (int i) {
return MySubVector(*this, vec_[i]);
}
void resize (size_t rows, size_t cols) {
vec_.resize(rows);
cols_ = cols;
}
};
如果您希望resize
在调整大小时为您设置一个特定的值,那么您必须对每一行进行迭代,调用调整大小操作,并设置初始值设定项。
struct resize_cols {
size_t cols;
int val;
resize_cols (size_t c, int v) : cols(c), val(v) {}
void operator () (std::vector<int> &vec) const {
vec.resize(cols, val);
}
};
void resize (size_t rows, size_t cols, int v) {
vec_.resize(rows);
std::for_each(vec_.begin(), vec_.end(), resize_cols(cols, v));
}
在这种情况下,只需在外部向量上使用resize
函数:
MyVector.resize( 2, std::vector<int>( 3, value ) );
更一般地说,如果您希望在不更改现有值的情况下调整大小,你必须循环。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 为char数组调整zlib-zpipe
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 预处理器:插入结构名称中的前一个行号
- 调整大小后指向元素值的指针unordered_map有效?
- 在未初始化映射的情况下,将值插入到映射的映射中
- 如何在c++中只将键插入到bimap的一侧
- 如何将结构插入到集合中并打印集合的成员
- C++json插入数组
- Visual Studio 2019:插入多个C++风格的单行注释
- nlohmann-json将一个数组插入到另一个数组中
- 在C++中调整向量中的索引
- 有效地使用std::unordered_map来插入或增加键的值
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 使用插入时自动调整标准::矢量的大小
- 通过每次调整矢量大小在矢量中插入元素是否需要更多时间
- 如何在调整大小的std::矢量的最后一个元素后面插入
- 如何避免插入过程中无序映射的滞后调整大小
- 插入矢量并调整其大小
- 当插入太多元素时,std::map是否自动调整大小