将数据追加到C++中的数组
Append data to array in C++
double b[3] = {3,3,4};
for(int i=0;i<3;i++) {
cout<<b[i]<<" "<<endl;
}
int sum = 0;
for(int i=0;i<3;i++) {
sum += b[i];
} cout<<"n"<<sum<<endl;
for(int i=0;i<3;i++) {
double norm_b = b[i]/sum;
cout<<norm_b<<endl;
}
结果:
0.3
0.3
0.4
如何将数据(norm_b(插入数组,就像在 Python 中append
一样?
数组的大小在其生命周期内永远不会改变。因此,无法插入(或删除(元素。
相反,可以做的是动态分配一个数组,并在插入时分配一个更大的数组,从旧数组中复制元素,然后可以取消分配 - 或者至少这是一般的想法;我跳过了实现细节。这种数据结构称为可调整大小的数组。标准库具有可调整大小数组的实现:std::vector
。
因为你提到了Python,所以有更好的库类和算法更接近你可能从Python使用的东西。
#include <vector>
#include <algorithm>
#include <numeric>
void main() {
std::vector<double> b{3, 3, 4}; // Init vector
// If compiler supports C++11 you can use range-for
for (auto value : b)
{
std::cout << value << " " << std::endl;
}
double sum = std::accumulate(b.begin(), b.end(), 0); // sum b, sum should be double, not int?
std::cout << "n"
<< sum << std::endl;
std::vector<double> norm_b(b.size()); // initialize norm_b with b.size() elements
size_t idx = 0;
std::generate(norm_b.begin(), norm_b.end(), [&b, &idx, &sum]() {
return b[idx++] / sum;
});
// Again range-for if C++11
for (auto value : norm_b)
{
std::cout << value << " " << std::endl;
}
}
如果您不完全理解,则应查找此代码中的许多内容:
- 启动
std::vector
的各种方法(初始值设定项列表 - 支撑初始化、计数构造函数等( - 标准::矢量迭代器
std::accumulate
std::generate
- λ
- 范围-为
- 基于 for 的迭代器(在上面的代码中未使用(
您只能将值"追加"到可以动态增长的数据结构中。一个类似 c 的数组(如果大小固定(。您可以尝试使用具有push_back
方法的std::vector
,相当于python append方法。
注意:而不是类 C 数组,请考虑使用std::array
它是 c++ STL 的一部分,并允许您在其上使用 STL 算法。
谢谢你们
解决
更新:
#include <vector>
vector<double> vec;
for(int i=0;i<3;i++) {
vec.push_back(b[i]/sum);
cout<<vec[i]<<endl;
}
you can use vector for append data as more as you like.For use vector you have to include a header file name vector.Here the code below:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
//declare a vector first
vector<double>v;
int sum = 0;
for(int i=0;i<3;i++)
{
sum += b[i];
}
for(int i=0;i<3;i++)
{
vec.push_back(b[i]/sum);
cout<<vec[i]<<" "<<endl;
}
return 0;
}
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '