我如何从具有 X 个元素的 std::vector 中的 p 中提取 n 个元素
How can i extract n elements out of p in a std::vector with X elements
我有一个包含 X 个元素的向量,如何从向量中的 p 个(示例中的 6 个)中提取 n 个元素(下例中的 3 个)?
这是我的做法。
//vector<int> a;
std::vector<int> a {10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35};
int X = a.size();
// code to extract 3 elements of 6 until the end of the vector
for (int i=0; i< a.size(); i+=6)
{
if (i >= a.size())
{
break;
}
else
{
sub_indices.push_back(i);
}
if ( (i+1) >= a.size())
{
break;
}
else
{
sub_indices.push_back(i+1);
}
if ((i+2) >= a.size())
{
break;
}
else {
sub_indices.push_back(i+2);
}
}
显示结果输出:
10 11 12 (drop three elements) 16 17 18 (drop three elements) 22 23 24 (drop three elements) 28 29 30 (drop three elements) 34 35
我是这样做的,但谁能告诉我更有效的方法?
解决方法如下:
#include <vector>
#include <iostream>
int main () {
// Better to initilize the vector like this instead of using multiple push_back
std::vector<int> a;
for (int i=10; i<36; ++i)
a.push_back (i);
// Here is another method to initilize your vector:
// std::vector<int> a {10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
// 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35};
// Here you loop over all elements and only select the three first elements
// of every six elements:
for (int i=0; i<a.size(); ++i)
if (i%6 < 3)
std::cout << a[i] << std::endl;
return 0;
}
% 运算符给出两个 int 值相除的余数。
重新组织向量,使每个元素为 3 int
s
vector< std::tuple<int, int, int> > a = {10,11,12,13, ... };
然后使用所有其他元素,例如:
for (size_t i{}; i<a.size(); ++i) {
if (i%2 != 0) {
std::cout << a[i] << std::endl;
}
}
我有一个包含 X 个元素的向量,如何从向量中的 p 个(示例中的 6 个)中提取 n 个元素(下例中的 3 个)? 这是我的做法。
//vector<int> a;
std::vector<int> a {10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35};
int X = a.size();
// code to extract 3 elements of 6 until the end of the vector
for (int i=0; i< a.size(); i+=6)
{
if (i >= a.size())
{
break;
}
else
{
sub_indices.push_back(i);
}
if ( (i+1) >= a.size())
{
break;
}
else
{
sub_indices.push_back(i+1);
}
if ((i+2) >= a.size())
{
break;
}
else {
sub_indices.push_back(i+2);
}
}
显示结果输出:
10 11 12 (drop three elements) 16 17 18 (drop three elements) 22 23 24 (drop three elements) 28 29 30 (drop three elements) 34 35
我是这样做的,但谁能告诉我更有效的方法?
解决方法如下:
#include <vector>
#include <iostream>
int main () {
// Better to initilize the vector like this instead of using multiple push_back
std::vector<int> a;
for (int i=10; i<36; ++i)
a.push_back (i);
// Here is another method to initilize your vector:
// std::vector<int> a {10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
// 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35};
// Here you loop over all elements and only select the three first elements
// of every six elements:
for (int i=0; i<a.size(); ++i)
if (i%6 < 3)
std::cout << a[i] << std::endl;
return 0;
}
% 运算符给出两个 int 值相除的余数。
重新组织向量,使每个元素为 3 int
s
vector< std::tuple<int, int, int> > a = {10,11,12,13, ... };
然后使用所有其他元素,例如:
for (size_t i{}; i<a.size(); ++i) {
if (i%2 != 0) {
std::cout << a[i] << std::endl;
}
}