使用 boost assign 初始化具有固定大小的向量的向量
Posted
技术标签:
【中文标题】使用 boost assign 初始化具有固定大小的向量的向量【英文标题】:Initializing a vector of vectors having a fixed size with boost assign 【发布时间】:2012-10-18 18:11:40 【问题描述】:拥有一个固定大小的向量,
vector<vector<int> > 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<int>)’
你能告诉我怎么做吗? 提前致谢
【问题讨论】:
【参考方案1】:您不需要使用boost
来获得所需的行为。下面创建一个vector
的10
vector<int>
s,每个vector<int>
包含10
int
s,其值为1
:
std::vector<std::vector<int>> v(10, std::vector<int>(10, 1));
【讨论】:
这是发布的第一个答案,它是最好的答案,但它既不是公认的答案,也不是投票最多的答案。叹。生活是不公平的。 我认为这是因为它有>>
即 >
之间没有空格:p
@dbliss 刚刚查看了编辑历史记录,看来 OP 在上传后就删除了这个答案。也许他之后看到了对方的答案,他已经完成了他的并且不想发布其他人所做的相同的事情(即使他是第一个)。无论如何,这对他来说感觉很糟糕。【参考方案2】:
这不使用boost::assign
,但可以满足您的需要:
vector<vector<int>> v(10, vector<int>(10,1));
这将创建一个包含 10 个 int
向量的向量,每个向量包含 10 个 ints
。
【讨论】:
为什么会有1
?
@anibey 提出的问题是关于使用值 1 初始化所有向量成员。向量构造函数的第二个参数是要复制的值。【参考方案3】:
我将尝试向 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;
当然这不是唯一的方法。如果你不添加或删除元素,也可以使用原生容器mat[]
,它们只不过是指针。这是我最喜欢的方式,使用 C++:
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;
这样,您不必使用#include <vector>
。希望它更清楚!
【讨论】:
【参考方案4】:#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] << " ";
cout << endl;
输入:
4
11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44
输出:
11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44
【讨论】:
以上是关于使用 boost assign 初始化具有固定大小的向量的向量的主要内容,如果未能解决你的问题,请参考以下文章
具有固定种子和可变精度的 boost::multiprecision 随机数
具有固定精度的重载 boost::multiprecision::pow
在 boost::asio 中使用具有可调整大小的 streambuf 的相同 istream