如何解决如何在 C++ 中将“int”变量转换为向量迭代器?
想象两个嵌套循环,每个循环都使用整数变量进行迭代(假设 i
和 j
)。在这两个循环中,函数 (fun
) 使用 vec
和 i
作为输入生成向量 (j
)。生成的向量必须保存在一个更大的向量中,称为 total
。我知道我可以使用 push_back
但我更喜欢先初始化我的向量(使用静态大小)。我尝试使用 insert
,但我不知道如何将 int
转换为 vector<int>::iterator
。我试过 static_cast<vector<int>::iterator>(2*i +j)
但它给了我这个错误:
no suitable constructor exists to convert from "int" to "__gnu_cxx::__normal_iterator<int *,std::vector<int,std::allocator<int>>>"
using namespace std;
vector<double> total(M,0); // Initilized with zeros
for (int i = 0; i < A; ++i)
{
for (int j = 0; j < B; ++j)
{
vector<double> vec = fun(i);
copy_n(vec.begin(),vec.size(),/* an iterator to where I want to save vec in total */);
}
}
解决方法
最简单的方法是 vec.begin() + 2*i + j
,但它仅适用于可随机访问的容器。对于通用解决方案,您必须使用 std::advance()
auto v = vec.begin();
std::advance(v,2*i + j);
,
上次迭代的 copy_n
返回值是您应该开始插入本次迭代的点。
std::vector<double> total(M,0); // Initilized with zeros
auto it = total.begin();
for (int i = 0; i < A; ++i)
{
for (int j = 0; j < B; ++j)
{
auto vec = fun(i);
it = std::copy_n(vec.begin(),vec.size(),it);
// or it = std::copy(vec.begin(),vec.end(),it);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。