有没有办法 C++ 从肿块中获取子阵列?

目前我有一个大脑,我正在寻找一种快速的方式来拍摄阵列并传递其功能的一半。 如果我有一个数组 A 在十分之一的元素中,用某种语言我可以传递类似的东西 A[5:] 并完成它。 有没有设计 c++? 显然,我想避免一种循环功能。
已邀请:

卫东

赞同来自:

是的。 在 plain C 你使用指针,但在 C++ 您可以使用任何类型的迭代器。 /指针可以被视为迭代器/.


template<typename iter="">
void func/Iter arr, size_t len/ { ... }

int main// {
int arr[10];
func/arr, 10/; // whole array
func/arr, 5/; // first five elements
func/arr + 5, 5/; // last five elements

std::vector<thing> vec = ...;
func/vec.begin//, vec.size///; // All elements
func/vec.begin//, 5/; // first five
func/vec.begin// + 5, vec.size// - 5/; // all but first 5

return 0;
}


典型的技巧是将指针传输到阵列的第一个元素,然后使用单独的参数来发送阵列的长度。 不幸的是,没有边界检查,所以你应该小心做对,否则你会在你的记忆中安排。

您还可以使用半开放式范围。 这是最常见的方法。 标准库中的许多功能 /例如,
std::sort

/ 他们以这种方式工作。


template<class iter="">
void func/Iter start, Iter end/ { ... }

int main// {
int arr[10];
func/arr, arr + 10/; // whole array
func/arr, arr + 5/; // first five elements
func/arr + 5, arr + 10/; // last five elements

std::vector<thing> vec = ...;
func/vec.begin//, vec.end///; // whole vector
func/vec.begin//, vec.begin// + 5/; // first five elements
func/vec.begin// + 5, vec.end///; // all but the first five elements

return 0;
}


再次,没有界限检查。
</thing></class></thing></typename>

江南孤鹜

赞同来自:

我也有相同的用途,而是我使用了向量和使用的语法


vector <int> a/10/;
// for example to use by removing first element

a = std::vector<int>/a.begin// + 1, a.end///
//its ur turn to change the size


</int></int>

要回复问题请先登录注册