将数据追加到C++中的数组

Append data to array in C++

本文关键字:数组 C++ 数据 追加      更新时间:2023-10-16
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;
}