Can the following program be written in CUDA 9.0 using generic vector<> types instead of raw dynamic arrays?
#include <vector>
#include <iostream>
__global__ void addVectors(float *a, float *b, float *c, int n) {
    // Calculate the global thread ID
    int tid = blockIdx.x * blockDim.x + threadIdx.x;
    // Make sure we don't go out of bounds 
    if (tid < n) {
        // Add the corresponding elements of a and b and store the result in c   
        c[tid] = a[tid] + b[tid];
    }
}
int main() {
    int n = 1024;
    
    // Use vectors instead of raw pointers
    std::vector<float> a(n), b(n), c(n);
    
    // Initialize the input vectors  
    for (int i = 0; i < n; i++) {
        a[i] = i;
        b[i] = i * i;    
    }
    
    // Allocate memory on the GPU 
    float* d_a, *d_b, *d_c;
    cudaMalloc(&d_a, a.size() * sizeof(float));
    cudaMalloc(&d_b, b.size() * sizeof(float));    
    cudaMalloc(&d_c, c.size() * sizeof(float));
    
    // Copy vectors to GPU
    cudaMemcpy(d_a, a.data(), a.size() * sizeof(float), cudaMemcpyHostToDevice);  
    // Similar for b and c
        
    // Launch kernel 
    addVectors<<<1, 1024>>>(d_a, d_b, d_c, n);
        
    // Copy result back from GPU
    cudaMemcpy(c.data(), d_c, c.size() * sizeof(float),cudaMemcpyDeviceToHost); 
    
    // Free GPU memory 
    cudaFree(d_a); 
    cudaFree(d_b);
    cudaFree(d_c);
        
    // Print first 10 elements
    for (int i = 0; i < 10; i++) {
        std::cout << c[i] << '\n';
    }
}
I want to replace *d_a, *d_b, and *d_c with generic types.
How can I do that?
