Visual studio 给出超出范围的错误代码块不会
Visual studio giving an out of range error codeblocks does not
我运行以下代码
#include <vector>
#include <complex>
#define N 8192
int main() {
std::vector< std::complex<double> > input;
input.reserve(N);
for (size_t k = 0; k < N; k++) {
input[k] = std::complex<double>(k, 0.0);
}
}
在 codeBlocks 和 Visual Studios 2019 中。后者给出运行时错误“vector subscript out of 运行ge”,而在 codeBlocks 中它运行良好。这是怎么回事,我该如何解决?
http://www.cplusplus.com/reference/vector/vector/reserve/
reserve
仅保证 vector
在达到保留容量之前不需要重新分配元素。
有关详细信息,请参阅所提供的 link 中的示例。
使用 resize
函数实际调整容器的大小以包含元素,这样您就不会超出容量。
矢量下标超出范围告诉您您试图访问一个不可用的索引。
首先,因为你知道确切的大小——你可以使用原始数组,例如 std::complex<double> input[N]
;或 std::array instead of vector. In any case the whay you are using STL container like vector or set is wrong. Generally you should use push_back or preferably emplace_back 将对象插入到动态容器的末尾。
第二个注意事项 - C++ 不是 C 避免定义像宏这样的常量。
例如:
#include <vector>
#include <complex>
#include <iostream>
int main(int argc, const char** argv) {
constexpr const std::size_t COMPLEX_COUNT = 8192;
std::vector< std::complex<double> > input(COMPLEX_COUNT);
for (std::size_t i = 0; i < COMPLEX_COUNT; i++) {
input.emplace_back( i, 0.0 );
}
for(auto it: input) {
std::cout << it << ' ';
}
std::cout << std::endl;
return 0;
}
读一些关于 STL 的书,比如 Scott Meyers 的 Effective STL
我运行以下代码
#include <vector>
#include <complex>
#define N 8192
int main() {
std::vector< std::complex<double> > input;
input.reserve(N);
for (size_t k = 0; k < N; k++) {
input[k] = std::complex<double>(k, 0.0);
}
}
在 codeBlocks 和 Visual Studios 2019 中。后者给出运行时错误“vector subscript out of 运行ge”,而在 codeBlocks 中它运行良好。这是怎么回事,我该如何解决?
http://www.cplusplus.com/reference/vector/vector/reserve/
reserve
仅保证 vector
在达到保留容量之前不需要重新分配元素。
有关详细信息,请参阅所提供的 link 中的示例。
使用 resize
函数实际调整容器的大小以包含元素,这样您就不会超出容量。
矢量下标超出范围告诉您您试图访问一个不可用的索引。
首先,因为你知道确切的大小——你可以使用原始数组,例如 std::complex<double> input[N]
;或 std::array instead of vector. In any case the whay you are using STL container like vector or set is wrong. Generally you should use push_back or preferably emplace_back 将对象插入到动态容器的末尾。
第二个注意事项 - C++ 不是 C 避免定义像宏这样的常量。
例如:
#include <vector>
#include <complex>
#include <iostream>
int main(int argc, const char** argv) {
constexpr const std::size_t COMPLEX_COUNT = 8192;
std::vector< std::complex<double> > input(COMPLEX_COUNT);
for (std::size_t i = 0; i < COMPLEX_COUNT; i++) {
input.emplace_back( i, 0.0 );
}
for(auto it: input) {
std::cout << it << ' ';
}
std::cout << std::endl;
return 0;
}
读一些关于 STL 的书,比如 Scott Meyers 的 Effective STL