向量构造函数创建少了一个元素的向量
vector constructor creating vector with one less element
我正试图将向量拆分为"几乎相等"的部分,并为这些部分创建子向量。
我在这里提出了最初的问题:如何将向量拆分为n";几乎相等";部分,但我找到了一个非常好的解决方案,我正试图从这里使用:从向量中提取子向量的最佳方法?
我写了这个函数来为起始值和结束值创建整数(round是我的函数,它四舍五入到指定的数字。(
void split( double number, double parts )
{
double loop = number / parts;
for( int i = 0; i < parts; i++ )
{
int start = round( i * loop, 0 );
int end = round( ( i + 1 ) * loop - 1, 0 );
cout << start << " " << end << endl;
}
}
到目前为止,这个功能还可以,但我的问题是,当我尝试运行这个:
vector<some> dest( &source[start], &source[end] );
然后它创建一个LESS元素,然后是必需的。我的意思是,例如,如果我称之为
vector<some> dest( &source[0], &source[99] );
那么它将具有99个元素而不是100个为什么会发生这种情况
如何修复如果我使用[end+1],那么它终止于最后一个向量,并带有"下标超出范围"。
vector
构造函数(以及所有接受指针范围的STL构造函数(被设计为接受一系列STL样式的迭代器。使用迭代器时,通过提供指向第一个和过去的结束元素的指针来指定范围,而不是第一个和最后一个元素。如果你想创建一个vector
作为另一个vector
的子范围(0.99(的副本,你可以写
vector<some> dest(source.begin(), source.begin() + 100);
请注意,这使用vector
迭代器来指定前100个元素的切片,而不是operator[]
,后者在提供的索引越界时具有未定义的行为。在您的情况下,这种未定义的行为表现为运行时调试错误。迭代程序没有这个问题,因为它们是专门为这种方式设计的。
如果您想使用原始C++数组作为vector
构造函数的输入,可以这样做:
vector<some> dest(source, source + 100);
希望这能有所帮助!
如果v是带有n
元素的std::vector
,则使用&v[n]
是不合法的,但可以使用
vector<some> dest(v.begin()+first, v.begin()+last+1);
即使CCD_ 10。
相关文章:
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 在 C++ 中输出枚举类类型的向量元素
- 用向量的向量元素初始化向量的空向量
- 为什么不允许使用可变长度数组作为向量元素?
- 在函数中传递向量元素
- 使用 Rcpp 加速替换迭代算法中的列表和向量元素是否合法?
- 返回向量元素的 l 值的正确方法是什么?
- 当向量增长时,指向向量元素的C++指针是否无效
- 如何在C++中从一个向量元素减去std::unorderede_map向量元素并更新它
- C++:向量元素赋值导致访问冲突
- 将向量元素与字符串元素进行比较,而不初始化向量
- 从2D矢量中找出最小尺寸的向量元素的更好方法
- 当我尝试将一个向量元素的值分配给另一个向量元素时,为什么我的应用程序会崩溃
- 使用递归C++向量元素的总和
- 如何查找为数组中的最低值编制索引的向量元素
- 限制指针访问STL ::向量元素
- 访问索引指向向量元素时的seg故障 - 做错了什么
- 如何使用指针访问向量元素的各个元素
- 向量元素数据损坏了Find()操作
- 将字符值分配给向量元素.C