gpt4 book ai didi

c++ - 我如何实现可以传递vector和int *的函数?

转载 作者:行者123 更新时间:2023-12-02 09:51:46 25 4
gpt4 key购买 nike

我想编写一个函数,该函数可以为空间连续的所有容器修改元素,例如vector,int *。字符* ....
这是我的代码:

#include <vector>
#include <string>
#include <iostream>

using namespace std;

template <typename T>
void test(T* t, size_t size) {
for (size_t i = 0; i < size; ++i) {
// *(t + i * sizeof(size_t)) += 2;
*(t + i * sizeof(size_t)) = *(t + i * sizeof(size_t)) + 2;
// cout << *reinterpret_cast<int*>(t + sizeof(size_t) * i) << endl;
}
}

int main() {
std::vector<size_t> a = {1,2,3,4};
test(&a[0], 4); // print result is: 3, 2,3,4, which only modify the first element
int b[4] = {1,2,3,4};
test(b, 4); // print result is: 3, 2,3,4, which only modify the first element
for (size_t i = 0; i < a.size(); ++i) {
cout << a[i] << " ";
}
for (size_t i = 0; i < 4; ++i) {
cout << b[i] << " ";
}
}
请参阅代码中的注释,我认为当我使用 *(t + i * sizeof(size_t))时,它将找到下一个int位置,但是失败了,有人可以帮忙吗?

最佳答案

如果要将2添加到集合的每个元素中,C++已经提供了一种方法:

std::vector<size_t> a = {1,2,3,4};
std::transform(a.begin(), a.end(), a.begin(), [](int i){ return i + 2; });
与您的代码相比,这具有一些明显的优势:
  • 它适用于非连续的集合(以及连续的集合)
  • 它将迭代与每个项目执行的操作分开
  • 它已经调试并经过严格测试
  • 关于c++ - 我如何实现可以传递vector和int *的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64002003/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com