Problem E: 可变长数组

Problem E: 可变长数组

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 472  Solved: 368
[Submit][Status][Web Board]

Description

定义一个类模板:

template <typename T>

class DataVector

{

private:

vector<T> members;//表示该数组中的所有元素

public:

void show();//用于显示所有元素。

T getSum();//用于求所有元素的和。

void clearVector();//用以清除所有元素。

vector<T>& getVector();//用于返回members。

};

Input

输入为多行,

第一行M>0表示有M个测试用例。

每个测试用例占一行。开始是字母“i"(表示该行是整数数据)或"d"(表示该行是实数数据),一个空格后是一个正整数N>0,表示其后有N个数据,这N个数据 就是构成一个数组的所有元素。

Output

每行输入产生2行输出:第一行显示所有的元素,两两之间用一个空格隔开,但是首尾不能有空格。第二行显示这些元素的和。

Sample Input

2
i 5 10 20 30 40 50
d 4 1.1 2.1 3.1 4.1

Sample Output

10 20 30 40 50
150
1.1 2.1 3.1 4.1
10.40

#include <iostream>
#include <cstdio>
#include <string>
#include <iomanip>
#include <vector>
using namespace std;
template <typename T>
class DataVector
{
private:
    vector<T> members;//表示该数组中的所有元素
public:
    void show()
    {
        for(int i=0;i<members.size();i++)
        {
            if(i!=0)
                cout<<" ";
            cout<<members[i];
        }
        cout<<endl;
    }//用于显示所有元素。
    T getSum()
    {
        T sum=0;
        for(int i=0;i<members.size();i++)
            sum+=members[i];
        return sum;
    }//用于求所有元素的和。
    void clearVector()
    {members.clear();}//用以清除所有元素。
    vector<T>& getVector()
    {
        return members;
    }//用于返回members。
};
int main()
{
    int cases, num, iData;
    double dData;
    DataVector<int> iVector;
    DataVector<double> dVector;
    char type;
    cin>>cases;
    for (int i = 0; i < cases; i++)
    {
        cin>>type;
        switch(type)
        {
        case ‘i‘:
            iVector.clearVector();
            cin>>num;
            for (int j = 0; j < num; j++)
            {
                cin>>iData;
                iVector.getVector().push_back(iData);
            }
            iVector.show();
            cout<<iVector.getSum()<<endl;
            break;
        case ‘d‘:
            dVector.clearVector();
            cin>>num;
            for (int j = 0; j < num; j++)
            {
                cin>>dData;
                dVector.getVector().push_back(dData);
            }
            dVector.show();
            cout<<setprecision(2)<<fixed<<dVector.getSum()<<endl;
        }
    }
    return 0;
}

  

时间: 2024-10-23 19:54:50

Problem E: 可变长数组的相关文章

关于可变长数组的思考

关于可变长数组的思考  前述: 第一条记: 最近在海纳百川的地铁上,脑海中常想起魏源说过一句话"师夷长技以制夷". 联想最近中国和日本的态度,再联想起自己的人生经历,可以说我是看日本动漫,打日本游戏长大的,到现在看的工具书中绝大部分是老美和日本的.还有一个那就是看金庸和古龙所代表的武侠江湖梦.总结就是,在日本文化我学到了坚强,永不服输.老美的文化给了我探求科学的阶梯.中国的文化给我烙印上了骨气,我一直认为最后着是最重要的.再总结就是"用别人的长处征服别人,用自己的长处统治别人

第九章 C99可变长数组VLA详解

C90及C++的数组对象定义是静态联编的,在编译期就必须给定对象的完整信息.但在程序设计过程中,我们常常遇到需要根据上下文环境来定义数组的情况,在运行期才能确知数组的长度.对于这种情况,C90及C++没有什么很好的办法去解决(STL的方法除外),只能在堆中创建一个内存映像与需求数组一样的替代品,这种替代品不具有数组类型,这是一个遗憾.C99的可变长数组为这个问题提供了一个部分解决方案. 可变长数组(variable length array,简称VLA)中的可变长指的是编译期可变,数组定义时其长

链接脚本在编程中的高级运用之一:可变长数组

作为嵌入式软件工程师,应该要清楚程序的每一条指令在哪里,什么时候会被加载到内存,什么时候会被执行.链接脚本会明确告诉你程序的代码和数据在内存中的分布.精确控制代码和数据在内存中的分布是高效利用内存资源的前提.自定义链接脚本是资深嵌入式软件工程师的必备技能,更是嵌入式架构师的最基本要求.此外,灵活定制链接脚本在编程方面有更高级的应用. 一.编译链接原理 简单讲述编译链接的基本原理有助于后面内容的理解. a. 简单点说,一个可执行程序包括文件头.代码段(.text).数据段(.bss).符号段等信息

Java中可变长参数的使用及注意事项

在Java5 中提供了变长参数(varargs),也就是在方法定义中可以使用个数不确定的参数,对于同一方法可以使用不同个数的参数调用,例如print("hello");print("hello","lisi");print("hello","张三", "alexia");下面介绍如何定义可变长参数 以及如何使用可变长参数. 1. 可变长参数的定义 使用...表示可变长参数,例如 prin

C之变长数组

变长数组是C99标准新加入的一个特性,它的加入大大方便了我们的编程,所谓变长数组,不是数组的长度可变,而是指允许使用变量来定义数组.这可以使我们写出更具通用性的函数.下面是一个例子,函数sum2d完成将一个二位数组中的所有数值相加并返回其和. #include<stdio.h> #define SIZE 10 #define LOC 2 #define ROW 4int sum2d(int loc, int row, int num[loc][row]); int main(void){ in

(STL初步)不定长数组:vector

STL是指C++的标准模板库.(存储着一些常用的算法和容器) vector是一个不定长数组.它把一些常用的操作"封装"在vector类型内部. 例如,a是一个vector.1对元素的操作有,可以用a.size()读取它的大小,a.resize()改变它的大小,a.push_back()向尾部添加元素,a.pop_back()删除最后一个元素.2对数组的操作有:a.clear()清空,a.empty()测试是否为空. vectors是一个模板类. 它的使用声明:vetor<int&

c/c++的0长数组(柔性数组)

在标准C和C++中0长数组如charArray[0]是不允许使用的,因为这从语义逻辑上看,是完全没有意义的. 但是,GUN中却允许使用,而且,很多时候,应用在了变长结构体中,如: StructPacket { Int state; Int len; Char cData[0]; //这里的0长结构体就为变长结构体提供了非常好的支持,可以指向独立的数据空间 }; 首先对0长数组做一个解释: 用途 :长度为0的数组的主要用途是为了满足需要变长度的结构体. 用法 :在一个结构体的最后 ,申明一个长度为

变长数组 - 转

http://ericwang.github.io/program/2010/02/10/c_Variable_length_arrays/ C中的Variable length arrays (变长数组) Variable length arrays 是C99的特性,而不是 C++98 的,关于c99标准的变长数组, 在标准的6.7.5.2 Array declarators里面有这样的说明: 2.Only ordinary identifiers (as defined in 6.2.3)

javascript arguments解释,实现可变长参数。

在C#中,有可变长参数params[],但是在js中,如何实现这种可变参数呢? 一.可变长参数 arguments是非常好的解决方法,一直不知道javascript有这个东西. 先来看看应用场景,使用arguments传入任意个数的参数到js函数里的写法. function Test() { console.log(arguments[0]); console.log(arguments[1]); console.log(arguments[2]); }; Test(1, 2, 3); 输出 1