c++ - 作业 : C++ Templates With Vectors

标签 c++ templates vector

我必须创建一个接受未知项目类型 vector 的函数。 这是我的代码:

template <typename S>
void printVector(vector<S*> c){
   typename vector<S>::const_iterator A = c.begin();
   for (int A; A != c.end(); A++){
       cout<<c[A]<<" ";
   }
   cout<<endl;
}

在我的主类中,这是我的 vector 和函数调用:

vector<int> x;
int j=5;
for(int i=0;i<j;i++){
    x.push_back(num[i]);
}
printVector(x);

当我尝试编译这段代码时,出现了这些错误:

exercise1_1.cpp: In function ‘int main()’:
exercise1_1.cpp:33:15: error: no matching function for call to ‘printVector(std::vector<int>&)
exercise1_1.cpp:33:15: note: candidate is:
exercise1_1.cpp:13:7: note: template<class S> void printVector(std::vector<S*>)

最佳答案

您的代码中存在一些错误。让我们看看它们:

  • printVector的签名中,您采用 vector<S*> 类型的参数.这意味着,对于给定类型 S ,你采用指向 S 的指针 vector .因此,例如,如果类型是 int ,你应该“发送”一个vector<int*> .在您的示例中,您正试图“发送” vector<int> , 所以 printVector 的签名应该是这样的:

    template <typename S>
    void printVector(vector<S> c)
    
  • 在您的 for 循环中,您正在声明变量 A再次,作为int .在 C++ 标准库中,您可以使用迭代器访问 vector 中的每个项目,或者像访问数组一样访问它们。你把这两种东西混在一起了。

如果你想使用迭代器循环,它应该是这样的:

typename vector<S>::const_iterator a = c.begin();
for (; a != c.end(); a++){
    cout<<*a<<" ";
}

这意味着,对于 vector 中的每个项目,打印它的值(注意我使用了 *a 因为我使用的是迭代器)。

或者使用基于索引的方法:

for (int i = 0; i < c.size(); i++){
   cout<<c[i]<<" ";
}

此外,作为 C++ 社区的常见做法,在接收非原始类型的变量时使用 const 引用。这可以防止执行对象的拷贝,因此在处理大型集合时它可能会更快。示例:

 void printVector(const vector<S>& c)

所以这是一个完整的工作示例:

#include <vector>
#include <iostream>

using namespace std;

template <typename S>
void printVector(const vector<S>& c){
   for (int i = 0; i < c.size(); i++){
       cout<<c[i]<<" ";
   }
   cout<<endl;
}

int main(int argc, char** args) {
    vector<int> x;
    int j=5;
    for(int i=0;i<j;i++){
        x.push_back(i);
    }
    printVector<int>(x); // Can be printVector(x); too
    return 0;
}

关于c++ - 作业 : C++ Templates With Vectors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13299330/

相关文章:

c++ - 有没有办法在编辑公共(public)控件中添加我自己的按钮?

c++ - 函数重载的规则

c++ - 使用内置的 C++ 排序函数对二维数组进行排序

c++ - C++ 的类模板中是否可以有一个通用的、非专用的静态成员?

c++ - 如何从模板类中的方法返回 NULL

c++ - 类模板、函数成员定义

c++ - 这种使用模板的类层次结构的函数重载方式安全吗?

包含线程函数的对象 vector 上的 C++ 错误

java - 如何近似 vector 旋转

java - 从字符串创建 android.graphics.Path 对象