c++的valarray类

valarrayvector有点像,但是它主要用来做计算,重载了很多运算符可以直接用

#include<iostream>
#include<valarray>
#include<vector>
#include<algorithm>

int main()
{
	using namespace std;
	vector<double> data;
	double temp;

	cout << "enter numbers (<=0 to quit):\n";
	while (cin >> temp && temp > 0) data.push_back(temp);
	sort(data.begin(), data.end()); // 排序

	int size = data.size();
	valarray<double> numbers(size);
	int i;
	for (i = 0; i < size; i++) numbers[i] = data[i];
	valarray<double> sq_rts(size);
	sq_rts = sqrt(numbers); // 对所有的number同时做sqrt
	valarray<double> results(size);
	results = numbers + 2.0 * sq_rts; // 运算符重载,对所有元素做相同运算
	cout.setf(ios_base::fixed);
	cout.precision(4);
	for (i = 0; i < size; i++) {
		cout.width(8);
		cout << numbers[i] << ": ";
		cout.width(8);
		cout << results[i] << endl;
	}
	cout << "done\n";

	return 0;
}

结果

enter numbers (<=0 to quit):
3.3 1.8 5.2 10 14.4 21.6 26.9 0
  1.8000:   4.4833
  3.3000:   6.9332
  5.2000:   9.7607
 10.0000:  16.3246
 14.4000:  21.9895
 21.6000:  30.8952
 26.9000:  37.2730
done
#include<iostream>
#include<valarray>
#include<cstdlib>

const int SIZE = 12;
typedef std::valarray<int> vint;

void show(const vint& v, int cols);

int main()
{
	using std::slice; // from <valarray>
	using std::cout;

	vint valint(SIZE);
	int i;
	for (i = 0; i < SIZE; ++i) valint[i] = std::rand() % 10;
	cout << "原始数列: \n";
	show(valint, 3);
	vint vcol(valint[slice(1, 4, 3)]); // 从1开始数4个数,间隔为3(1,4,7,10)
	cout << "second column: \n";
	show(vcol, 1);
	valint[slice(2, 4, 3)] = 10; // 将第3列的值全部置为10
	cout << "set last column to 10:\n";
	show(valint, 3);
	cout << "set first column to sum of next two:\n";
	valint[slice(0, 4, 3)] = vint(valint[slice(1, 4, 3)]) + vint(valint[slice(2, 4, 3)]);
	show(valint, 3);

	return 0;
}

void show(const vint& v, int cols)
{
	using std::cout;
	using std::endl;

	int lim = v.size();
	for (int i = 0; i < lim; ++i)
	{
		cout.width(3);
		cout << v[i];
		if (i % cols == cols - 1) cout << endl;
		else cout << " ";
	}
	if (lim % cols != 0) cout << endl;
}

结果

原始数列:
  1   7   4
  0   9   4
  8   8   2
  4   5   5
second column:
  7
  9
  8
  5
set last column to 10:
  1   7  10
  0   9  10
  8   8  10
  4   5  10
set first column to sum of next two:
 17   7  10
 19   9  10
 18   8  10
 15   5  10
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值