C++关于类模板(vector)的问题。

2024-12-17 08:50:56
推荐回答(5个)
回答1:

main函数的应用程序的入口函数,不能定义成模板函数。
模板函数模板类都是在调用(或者实例化)的时候,被指定了参数类型之后才生成真正的代码的。可以查相关的书籍《thinking in C++》《stl 源码剖析》等。
你改了main函数的原型,当然会出现链接错误。

vector本身是模板类,你可以指定任意的类型装进去。
作为模板类,vector能够保存“任意类型”的数据,是指相对于vector这个类来说,他不关心保存的是什么类型的。但是当你实例化一个vector的时候,你就需要确定一个参数类型,这样你才能拥有一个可以用来实例化一个具体对象的类类型,比如vector,vector,vecor等。

任意类型是相对于模板类的,不是相对于应用程序。对于一个应用程序,他的逻辑是确定的,他能处理的数据类型也是确定的。即使是某些可以产生随意性结果的程序,他的逻辑在一定程度上也是确定的。

我不知道我说没说清楚,如果还有问题,请提出。

回答2:

可以去掉using namespace std,因为程序中你用到的std名字空间的类型都用了using指示声明,这是可以做到的。至于你说编写头文件时,用std::使用std名字空间中的类型,这是为了防止std在头文件中滥用而造成“名字污染”,这刚好和引进名字空间的目的相反,事与愿违了!

回答3:

warningC4786: 'std::reverse_iterator,std::allocator >*,std::basic_string,std::allocator >,std::basic_string,std::allocator > &,std::basic_string,std::allocator > *,int>' : identifier was truncated to '255' chara
cters in the debug information
在调试信息里,标识符'std::reverse_ite........................cator > *,int>'被截断到255个字符
_________
我这不用using namespace std;没事啊, 除了vc6,
你多加个using std::vector; 试试
不过text是vector的啊, 你用vector::size_type干嘛?
用vector::size_type; 和using std::vector;

或者你换个高版本的或其他的编译器试试

回答4:

你的代码没什么大问题,只是有两个地方需要修改一下,如下(见注释):
=====================================================
#include
#include
#include
using namespace std;//只需要使用此句就可以了
//using std::cin;
//using std::cout;
//using std::endl;
//using std::string;
//using std::vector;
int main()
{
vector text;
string word;
//while(cin>>word;)//cin>>word执行后返回的类型为istream类型,一般不能通过判断它的执行结果来控制循环
//应该在循环内部判断输入的值来控制是否退出循环
while(true)
{
cin>>word;
text.push_back(word);
//如果输入"exit"则退出
if ( word.compare("exit")==0)
{
break;
}
}
for(vector::size_type index=0;index!=text.size();index++)
cout< cout<
return 0;
}

回答5:

#include
#include
#include
int main(int argc, char* argv[])
{
std::copy(&argv[1],&argv[argc],
std::ostream_iterator(std::cout,"\t"));

return argc != 1;
}
比你写的简单多了。