如何将元素分配给向量?
How to assign elements to a vector?
我不明白如何将外部文件中的某种序列(例如数字序列)分配给 vector
/数组。如果只是几个数字,那么您只需将它们写在括号中即可。如果你有 100000 个数字怎么办?我希望有人有足够的资格来回答这个问题。
我需要编写一个脚本来对数组的特定成员求和。该数组正在从一个文件中提取并放入另一个文件中。但是我更需要它成为 vector
,但我不明白它是如何工作的。在我分配值并以某种方式初始化 vector
之后,我还需要指定 vector
成员是数字,然后将它们相加。
在main中添加程序。
这 2 个 for 循环应该搜索 vector 的特定成员。所以第一个循环为 f = 0,我应该添加:
x = 1 / AC * ( A * ( 评分者[第 4 个成员] + 评分者 [4 + 3 = 第 7 个成员] + 评分者 [4 + 6 = 第 10 个成员] + 评分者 [4 + 9 = 第 13 个成员] ) + C * 评分员[4 - 3 = 第一个成员] )
然后打印在文件中+“”字段分隔符,然后
x = 1 / AC * ( A * ( 评分者[第 5 个成员] + 评分者 [5 + 3 = 第 8 个成员] + 评分者 [5 + 6 = 第 11 个成员] + 评分者 [5 + 9 = 第 14 个成员] ) + C * 评分员[5 - 3 = 第二个成员] )
最后
x = 1 / AC * ( A * ( 评分者[第 6 个成员] + 评分者 [6 + 3 = 第 9 个成员] + 评分者 [6 + 6 = 第 12 个成员] + 评分者 [6 + 9 = 第 15 个成员] ) + C * 评分员[6 - 3 = 第 3 个成员] )
cout << endl;
然后第一个 for 循环应该做同样的事情,只是 f 应该是 15 个成员,像这样:f = 15,所以 i = 15 + 4 = 19
x = 1 / AC * ( A * ( 评分者[第 19 个成员] + 评分者[19 + 3 = 第 22 个成员] + 评分者[4 + 6 = 第 10 个成员] + 评分者[4 + 9 = 第 13 个成员] ) + C * 评分员[4 - 3 = 第一个成员] )
等等...
P.S。我没有显示输入文件,因为提取过程有效。已经有人帮助我了。希望代码和数组足够了。
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <cmath>
#include <set>
using namespace std;
const double A = 2.66E-23, B = 4.65E-23, AC = 1.53E-22, c = 0;
const int SIZE = 360;
double grades[SIZE];
void readData()
{
ifstream ifs;
ofstream ofs;
ifstream inFile("out.txt", std::ifstream::in);
ofstream of("out1.txt", std::ofstream::out);
streambuf* origBuf = cout.rdbuf();
cout.rdbuf(of.rdbuf());
//inFile.open(inFileName.c_str());
if (inFile.is_open())
{
std::string s; // to read 2 letters like Ti in your input after edition
for (int i = 0; i < SIZE; i++)
{
if ((i % 3) == 0)
{
if (!(inFile >> s))
{
std::cerr << std::endl
<< "error when reading letter(s) line "
<< (i / 3) + 1 << std::endl;
return;
}
}
if (!(inFile >> grades[i]))
{
std::cerr << std::endl << "error when reading the " << i + 1
<< " nth double" << std::endl;
return;
}
std::cout << grades[i] << " ";
}
cout << endl;
// std::cout << grades[i] << " ";
}
else
{ //Error message
std::cerr << "Can't find input file " << inFile << std::endl;
}
cout.rdbuf(origBuf);
ifs.close();
ofs.close();
return;
}
int main()
{
readData();
std::vector<int> grader[SIZE];
double x;
int f = SIZE;
for (f = 0; f < SIZE; f += 15)
{
for (int i = f + 4; i < i + 3; i++)
{
x = 1 / AC * (A * (grader[i] + grader[i + 3] + grader[i + 6] +
grader[i + 9]) + C * grader[i - 3]);
cout << x << " ";
}
}
return 0;
}
我想成为的数组 vector
:
3.07097 5.31908 5.50539 -3.37566 6.15709 4.24421 4.97241 6.00196 6.76656 -1.53792 5.17956 5.60283 4.9001 3.92165 5.40794 3.07098 4.6307 1.83512 3.64437 3.94783 0.573947 3.37567 3.7927 3.0963 3.71667 6.02814 1.93257 1.53791 4.77024 1.7377 1.23741 2.14326 5.50539 0.664021 1.46039 4.24421 0.932722 1.30525 6.76656 0.591709 3.5407 5.60283 2.77048 2.28278 5.40794 3.07098 0.344186 1.83512 3.37567 1.18219 0.573947 3.64437 1.02706 3.0963 1.53791 0.204662 1.93257 -0.591718 6.4091 1.7377 6.14195 0 5.50539 2.71164 7.30721 4.24421 7.02003 0.155135 6.76656 0.946195 6.20444 5.60283 5.25459 1.25791 5.40794 6.78321 2.48745 1.83512 5.90513 2.33231 0.573947 5.90513 2.64258 3.0963 7.67057 1.22954 1.93257 -0.946203 3.74536 1.7377 - 2.47483 4.9749 20.1864 -1.59675 4.81976 18.9252 -1.59675 5.13003 21.4476 5.25459 3.71699 20.2838 -3.36219 6.2328 20.089 2.47482 4.9749 9.17565 1.59674 5.13003 10.4368 1.59674 4.81976 7.91448 3.36219 6.2328 9.0782 3.36219 3.71699 9.27307 1.23741 7.11816 20.1864 0.664017 6.43 529 18.9252 0.932718 6.28015 21.4476 4.9001 1.05324 20.2838 2.77047 7.25768 20.089 -1.23742 2.83164 9.17565 -0.664026 3.51451 10.4368 -0.932727 3.66965 7.91448 -0.591714 1.4342 9.0782 5.8463 2.69211 9.27307 1.23741 2.83164 20.1864 0.932718 3.66965 18.9252 0.664017 3.51451 21.4476 2.77048 2.69211 20.2838 0.591714 1.4342 20.089 -1.23742 7.11816 9.17565 - 0.932727 6.28015 10.4368 -0.664026 6.43529 7.91448 -2.77047 7.25768 9.0782 3.71668 1.05324 9.27307 5.5458 0.344186 12.8459 4.97241 1.02706 14.1071 5.24111 1.18219 11.5847 0.591709 6.4091 12.7485 7.07886 0.204662 12.9433 5.5458 4.6307 12.8459 5.24111 3.7927 14.1071 4.97241 3.94783 11.5847 -1.53792 4.77024 12.7485 4.9001 6.02814 12.9433 1.83357 2.48745 12.8459 2.71165 2.64258 14.1071 2.71165 2.33231 11.5847 0.946195 3.74536 12.7485 0.946199 1.22954 12.9433 2.47482 0 16.5162 -2.71164 7.30721 15.255 1.59674 0.155135 17.7773 -0.946203 6.20444 16.6136 3.36219 1.25791 16.4187 3.07097 5.31908 16.5162 3.37566 6.15709 15.255 3.64437 6.00196 17.7773 1.53791 5.17956 16.6136 3.71668 3.92165 16.4187 -1.23741 2.14326 16.5162 -0.664021 1.46039 15.255 7.68405 1.30525 17.7773 -0.591718 3.5407 16.6136 5.8463 2.28278 16.4187
这是错误的
std::vector<int> grader[SIZE];
那是一个向量数组,我确定这不是你想要的
试试这个
std::vector<int> grader(SIZE);
这是一个大小为 SIZE
的向量。一旦你以正确的方式声明了你的向量,你就可以像使用数组一样使用它。
这是错误的
for (f = 0; f < SIZE; f += 15)
{
for (int i = f + 4; i < i + 3; i++)
{
x = 1 / AC * (A * (grader[i] + grader[i + 3] + grader[i + 6] +
grader[i + 9]) + C * grader[i - 3]);
cout << x << " ";
}
}
当 f
等于 SIZE - 1
,i
等于 f + 4
或 SIZE + 3
,所以 grader[i]
将是 out-of-bounds使用权。无论 grader
是向量还是数组,这都是正确的。
这是错误的
for (int i = f + 4; i < i + 3; i++)
i < i + 3
始终为真。所以这显然不是你想要的。
向量很简单,你的错误要么在语法上,要么与向量完全无关。
我不明白如何将外部文件中的某种序列(例如数字序列)分配给 vector
/数组。如果只是几个数字,那么您只需将它们写在括号中即可。如果你有 100000 个数字怎么办?我希望有人有足够的资格来回答这个问题。
我需要编写一个脚本来对数组的特定成员求和。该数组正在从一个文件中提取并放入另一个文件中。但是我更需要它成为 vector
,但我不明白它是如何工作的。在我分配值并以某种方式初始化 vector
之后,我还需要指定 vector
成员是数字,然后将它们相加。
在main中添加程序。
这 2 个 for 循环应该搜索 vector 的特定成员。所以第一个循环为 f = 0,我应该添加:
x = 1 / AC * ( A * ( 评分者[第 4 个成员] + 评分者 [4 + 3 = 第 7 个成员] + 评分者 [4 + 6 = 第 10 个成员] + 评分者 [4 + 9 = 第 13 个成员] ) + C * 评分员[4 - 3 = 第一个成员] )
然后打印在文件中+“”字段分隔符,然后
x = 1 / AC * ( A * ( 评分者[第 5 个成员] + 评分者 [5 + 3 = 第 8 个成员] + 评分者 [5 + 6 = 第 11 个成员] + 评分者 [5 + 9 = 第 14 个成员] ) + C * 评分员[5 - 3 = 第二个成员] )
最后
x = 1 / AC * ( A * ( 评分者[第 6 个成员] + 评分者 [6 + 3 = 第 9 个成员] + 评分者 [6 + 6 = 第 12 个成员] + 评分者 [6 + 9 = 第 15 个成员] ) + C * 评分员[6 - 3 = 第 3 个成员] )
cout << endl;
然后第一个 for 循环应该做同样的事情,只是 f 应该是 15 个成员,像这样:f = 15,所以 i = 15 + 4 = 19
x = 1 / AC * ( A * ( 评分者[第 19 个成员] + 评分者[19 + 3 = 第 22 个成员] + 评分者[4 + 6 = 第 10 个成员] + 评分者[4 + 9 = 第 13 个成员] ) + C * 评分员[4 - 3 = 第一个成员] )
等等...
P.S。我没有显示输入文件,因为提取过程有效。已经有人帮助我了。希望代码和数组足够了。
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <cmath>
#include <set>
using namespace std;
const double A = 2.66E-23, B = 4.65E-23, AC = 1.53E-22, c = 0;
const int SIZE = 360;
double grades[SIZE];
void readData()
{
ifstream ifs;
ofstream ofs;
ifstream inFile("out.txt", std::ifstream::in);
ofstream of("out1.txt", std::ofstream::out);
streambuf* origBuf = cout.rdbuf();
cout.rdbuf(of.rdbuf());
//inFile.open(inFileName.c_str());
if (inFile.is_open())
{
std::string s; // to read 2 letters like Ti in your input after edition
for (int i = 0; i < SIZE; i++)
{
if ((i % 3) == 0)
{
if (!(inFile >> s))
{
std::cerr << std::endl
<< "error when reading letter(s) line "
<< (i / 3) + 1 << std::endl;
return;
}
}
if (!(inFile >> grades[i]))
{
std::cerr << std::endl << "error when reading the " << i + 1
<< " nth double" << std::endl;
return;
}
std::cout << grades[i] << " ";
}
cout << endl;
// std::cout << grades[i] << " ";
}
else
{ //Error message
std::cerr << "Can't find input file " << inFile << std::endl;
}
cout.rdbuf(origBuf);
ifs.close();
ofs.close();
return;
}
int main()
{
readData();
std::vector<int> grader[SIZE];
double x;
int f = SIZE;
for (f = 0; f < SIZE; f += 15)
{
for (int i = f + 4; i < i + 3; i++)
{
x = 1 / AC * (A * (grader[i] + grader[i + 3] + grader[i + 6] +
grader[i + 9]) + C * grader[i - 3]);
cout << x << " ";
}
}
return 0;
}
我想成为的数组 vector
:
3.07097 5.31908 5.50539 -3.37566 6.15709 4.24421 4.97241 6.00196 6.76656 -1.53792 5.17956 5.60283 4.9001 3.92165 5.40794 3.07098 4.6307 1.83512 3.64437 3.94783 0.573947 3.37567 3.7927 3.0963 3.71667 6.02814 1.93257 1.53791 4.77024 1.7377 1.23741 2.14326 5.50539 0.664021 1.46039 4.24421 0.932722 1.30525 6.76656 0.591709 3.5407 5.60283 2.77048 2.28278 5.40794 3.07098 0.344186 1.83512 3.37567 1.18219 0.573947 3.64437 1.02706 3.0963 1.53791 0.204662 1.93257 -0.591718 6.4091 1.7377 6.14195 0 5.50539 2.71164 7.30721 4.24421 7.02003 0.155135 6.76656 0.946195 6.20444 5.60283 5.25459 1.25791 5.40794 6.78321 2.48745 1.83512 5.90513 2.33231 0.573947 5.90513 2.64258 3.0963 7.67057 1.22954 1.93257 -0.946203 3.74536 1.7377 - 2.47483 4.9749 20.1864 -1.59675 4.81976 18.9252 -1.59675 5.13003 21.4476 5.25459 3.71699 20.2838 -3.36219 6.2328 20.089 2.47482 4.9749 9.17565 1.59674 5.13003 10.4368 1.59674 4.81976 7.91448 3.36219 6.2328 9.0782 3.36219 3.71699 9.27307 1.23741 7.11816 20.1864 0.664017 6.43 529 18.9252 0.932718 6.28015 21.4476 4.9001 1.05324 20.2838 2.77047 7.25768 20.089 -1.23742 2.83164 9.17565 -0.664026 3.51451 10.4368 -0.932727 3.66965 7.91448 -0.591714 1.4342 9.0782 5.8463 2.69211 9.27307 1.23741 2.83164 20.1864 0.932718 3.66965 18.9252 0.664017 3.51451 21.4476 2.77048 2.69211 20.2838 0.591714 1.4342 20.089 -1.23742 7.11816 9.17565 - 0.932727 6.28015 10.4368 -0.664026 6.43529 7.91448 -2.77047 7.25768 9.0782 3.71668 1.05324 9.27307 5.5458 0.344186 12.8459 4.97241 1.02706 14.1071 5.24111 1.18219 11.5847 0.591709 6.4091 12.7485 7.07886 0.204662 12.9433 5.5458 4.6307 12.8459 5.24111 3.7927 14.1071 4.97241 3.94783 11.5847 -1.53792 4.77024 12.7485 4.9001 6.02814 12.9433 1.83357 2.48745 12.8459 2.71165 2.64258 14.1071 2.71165 2.33231 11.5847 0.946195 3.74536 12.7485 0.946199 1.22954 12.9433 2.47482 0 16.5162 -2.71164 7.30721 15.255 1.59674 0.155135 17.7773 -0.946203 6.20444 16.6136 3.36219 1.25791 16.4187 3.07097 5.31908 16.5162 3.37566 6.15709 15.255 3.64437 6.00196 17.7773 1.53791 5.17956 16.6136 3.71668 3.92165 16.4187 -1.23741 2.14326 16.5162 -0.664021 1.46039 15.255 7.68405 1.30525 17.7773 -0.591718 3.5407 16.6136 5.8463 2.28278 16.4187
这是错误的
std::vector<int> grader[SIZE];
那是一个向量数组,我确定这不是你想要的
试试这个
std::vector<int> grader(SIZE);
这是一个大小为 SIZE
的向量。一旦你以正确的方式声明了你的向量,你就可以像使用数组一样使用它。
这是错误的
for (f = 0; f < SIZE; f += 15)
{
for (int i = f + 4; i < i + 3; i++)
{
x = 1 / AC * (A * (grader[i] + grader[i + 3] + grader[i + 6] +
grader[i + 9]) + C * grader[i - 3]);
cout << x << " ";
}
}
当 f
等于 SIZE - 1
,i
等于 f + 4
或 SIZE + 3
,所以 grader[i]
将是 out-of-bounds使用权。无论 grader
是向量还是数组,这都是正确的。
这是错误的
for (int i = f + 4; i < i + 3; i++)
i < i + 3
始终为真。所以这显然不是你想要的。
向量很简单,你的错误要么在语法上,要么与向量完全无关。