各行の新しいfloat
番号を含む_.data
_または_.txt
_ファイルからベクトルに読み込む必要があります。
私はこれまで幅広く検索し、多くの異なる方法を適用しましたが、毎回_0
_のMain.size()
と_"Vector Subscript out of Range"
_を示すエラーの同じ結果が得られるため、ベクトルは明らかにファイルに何も読み込まないだけです。
注:ファイルはフォルダー内にあり、VSプロジェクトにも含まれています。
とにかく、ここに私のコードがあります:
_#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>
using namespace std;
int main() {
vector<double> Main;
int count;
string lineData;
double tmp;
ifstream myfile ("test.data", ios::in);
double number;
myfile >> count;
for(int i = 0; i < count; i++) {
myfile >> tmp;
Main.Push_back(tmp);
cout << count;
}
cout << "Numbers:\n";
cout << Main.size();
for (int i=0; i=((Main.size())-1); i++) {
cout << Main[i] << '\n';
}
cin.get();
return 0;
}
_
私が得る結果は常に単純です:
_Numbers:
0
_
ループが間違っています:
for (int i=0; i=((Main.size())-1); i++) {
これを試して:
for (int i=0; i < Main.size(); i++) {
また、数値をベクトルに読み込んで標準出力に書き込むより慣用的な方法は、次のようなものです。
#include <iostream>
#include <iterator>
#include <fstream>
#include <vector>
#include <algorithm> // for std::copy
int main()
{
std::ifstream is("numbers.txt");
std::istream_iterator<double> start(is), end;
std::vector<double> numbers(start, end);
std::cout << "Read " << numbers.size() << " numbers" << std::endl;
// print the numbers to stdout
std::cout << "numbers read in:\n";
std::copy(numbers.begin(), numbers.end(),
std::ostream_iterator<double>(std::cout, " "));
std::cout << std::endl;
}
ただし、ifstream
のステータスで読み取りエラーを確認する必要があります。
ジュアンチョパンザの答えを少し拡大するために...
_for (int i=0; i=((Main.size())-1); i++) {
cout << Main[i] << '\n';
}
_
これを行います:
i
を作成し、_0
_に設定します。i
をMain.size() - 1
に設定します。 Main
は空なので、Main.size()
は_0
_であり、i
は_-1
_に設定されます。Main[-1]
_は範囲外アクセスです。カボム。ほんの一言。書く代わりに
_for (int i=0; i=((Main.size())-1); i++) {
cout << Main[i] << '\n';
}
_
上記で提案したように、次のように記述します。
_for (vector<double>::iterator it=Main.begin(); it!=Main.end(); it++) {
cout << *it << '\n';
}
_
イテレータを使用します。 _C++11
_サポートがある場合、i
をauto i=Main.begin()
として宣言できます(ただし、便利なショートカットです)
これにより、_-1
_を意図せずに除外することによって引き起こされる厄介なone-position-out-of-boundエラーが回避されます。
1.ループでは、値を比較するのではなく、値を割り当てています。
i =((Main.size())-1)-> i。(-1)Main.size()以降
Main [i]は「Vector Subscript out of Range」coz i = -1を生成します。
2. Main.size()が0になるのは、ファイルが見つからないためかもしれません。ファイルパスを指定し、出力を確認します。また、変数を初期化することをお勧めします。
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main()
{
fstream dataFile;
string name , Word , new_Word;
vector<string> test;
char fileName[80];
cout<<"Please enter the file name : ";
cin >> fileName;
dataFile.open(fileName);
if(dataFile.fail())
{
cout<<"File can not open.\n";
return 0;
}
cout<<"File opened.\n";
cout<<"Please enter the Word : ";
cin>>Word;
cout<<"Please enter the new Word : ";
cin >> new_Word;
while (!dataFile.fail() && !dataFile.eof())
{
dataFile >> name;
test.Push_back(name);
}
dataFile.close();
}