std相关内容
使用 scanf,通常有一种直接获取格式化输入的方法: 1) 大于 0 且小于 1 的实数行.以“x"结尾,例如:0.32432523x scanf("0.%[0-9]x", &number); 2) 行表示格式为:30+28=58 scanf(":%d+%d=%99s", &number1, &number2, &total); cin的解决方法是什么,只用标准库? 解决方案
..
我正在尝试使用以下代码读取一行: while(fscanf(f, "%[^\n\r]s", cLine) != EOF ){/* 用 cLine 做一些事情 */} 但不知何故,我每次都只得到第一行.这是阅读一行的糟糕方式吗?我应该修复什么才能使其按预期工作? 解决方案 使用 fscanf() 函数几乎总是一个坏主意,因为它可以离开您的文件失败时指针位于未知位置. 我更喜欢使用
..
是否有一些类似于 srand() 的函数,我需要调用它来确保 std::random_shuffle() 总是产生不同的结果?即如果我用相同的数据多次调用它,我希望每次的顺序都不同.我如何确保这一点? 解决方案 std::random_shuffle 有两种形式.一个接受 2 个参数(开始/结束迭代器),一个接受 3 个参数(开始/结束迭代器和一个随机生成器). 第一种形式使用 st
..
我想知道如何找到验证特定条件(例如大于)的元素的索引位置.例如,如果我有一个 int 值向量 vectorⅤ; V 包含值 3 2 5 8 2 1 10 4 7 并且我想获取大于 5 的元素的所有 索引位置.我知道 std::find_if 但根据文档,它只找到满足条件的第一个元素. 解决方案 Loop std::find_if,从上次停止的地方开始. 示例(查看效果):
..
是否有任何内置函数告诉我我的向量是否包含某个元素例如 std::vectorv;v.push_back("abc");v.push_back("xyz");if (v.contains("abc"))//我正在寻找一个这样的功能,有没有//这样的函数还是我需要遍历整个向量? 解决方案 您可以使用 std::find如下: if (std::find(v.begin(), v.end(),
..
C++ 中是否有内置的向量函数来反转向量? 或者你只需要手动完成? 解决方案 algorithm 标题中有一个函数 std::reverse 用于此目的. #include #include int main() {std::vector一个;std::reverse(a.begin(), a.end());返回0;}
..
我有一个函数可以逐行读取 CSV 文件.对于每一行,它会将这条线分割成一个向量.执行此操作的代码是 std::stringstream ss(sText);std::string 项目;while(std::getline(ss, item, ',')){m_vecFields.push_back(item);} 这工作正常,除非它读取最后一个值为空的行.例如, text1,tex2,
..
我有以下模板. templatestd::vectormap(const std::vector &v, std::function f) {std::vector资源;res.reserve(v.size());std::transform(std::begin(v), std::end(v), std::end(res), f);返回资源;} 当我在代码中使用它时,我指定了模板参数.为什么
..
我实例化一个 std::vector foo(1000). foo.size() 现在是 1000,foo.capacity() 也是 1000. 如果我用 foo.clear() 清除向量,size() 现在是 0,但是 capacity() 是什么>?标准对此有任何说明吗? 解决方案 不,它没有.向量的容量永远不会减少.这不是标准规定的,但在 VC++ 和 g++ 的标准库
..
C++ 标准似乎没有声明任何一方对容量的副作用resize(n),用 n 或 clear(). 它确实声明了 push_back 和 pop_back - O(1) 的摊销成本 我可以设想一个执行通常类型的容量更改的实现ala CLRS 算法(例如,放大时加倍,将 size 减小到
..
我试图使用 GCC(测试版本 4.5.1、4.6.3、4.8.4): #include #include #include #include 使用 std::chrono::system_clock;int main(){system_clock::time_point now = system_clock::now();std::time_t now_c = sy
..
我试图找出一种在向量中查找某个对象的索引的好方法 - 通过将字符串与对象中的成员字段进行比较. 像这样: find(vector.begin(), vector.end(), [object where obj.getName() == myString]) 我搜索没有成功 - 也许我不完全明白要寻找什么. 解决方案 您可以使用 std::find_if 带有合适的函子.在此示例
..
gcc 编译时,编译器和链接器什么时候需要使用标志-stdlib=libstdc++? 编译器会自动使用libstdc++吗? 我在 Ubuntu 13.10 上使用 gcc4.8.2,我想使用 c++11 标准.我已经将 -std=c++11 传递给编译器. 解决方案 在 Linux 上:一般来说,所有常用的 linux 发行版都会默认使用 libstdc++,并且所有现代版
..
我正在处理我的编程任务的“驱动程序"部分,但我不断收到这个荒谬的错误: 错误 C2065:'cout':未声明的标识符 我什至尝试过使用 std::cout 但我收到另一个错误消息:IntelliSense: namespace "std" has no member "cout" 当我有声明 using namespace std,包括 iostream + 我什至尝试使用 ostr
..
为什么 std::remove_const 不将 const T& 转换为 T&?这个公认的相当人为的例子证明了我的问题: #include int main(){int a = 42;std::remove_const::type b(a);//这个断言失败静态断言(!std::is_same::value,“为什么 r
..
C++ 标准库是否定义了这个函数,还是我必须求助于 Boost? 我在网上搜索,除了 Boost 什么都找不到,但我想我最好在这里问一下. 解决方案 仅部分. C++11 有 std::to_string 用于内置类型: [n3290: 21.5/7]: string to_string(int val);字符串 to_string(unsigned val);字符串
..
如何将 std::chrono::time_point 转换为带小数秒的日历日期时间字符串? 例如: "10-10-2012 12:38:40.123456" 解决方案 如果是system_clock,这个类有time_t转换. #include #include #include 使用命名空间 std::chrono;int main(){system
..
我理解人们不能这样做的原因(重新平衡和其他东西): 迭代器 i = m.find(33);如果(我!= m.end())i->第一个= 22; 但到目前为止,更改键的唯一方法(我知道)是从树中完全删除节点,然后使用不同的键插入值: 迭代器 i = m.find(33);如果(我!= m.end()){值= i->秒;m.erase(i);m[22] = 值;} 出于更多原因,这对我来说似乎
..
我目前有一个 std::map 将一个整数值存储到一个唯一的字符串标识符中,我确实使用该字符串进行查找.它主要做我想要的,除了它不跟踪插入顺序.因此,当我迭代地图以打印出值时,它们会根据字符串进行排序;但我希望它们按照(第一次)插入的顺序进行排序. 我想过使用 vector> 代替,但我需要查找字符串并将整数值增加大约 10,000,000 次,所以我不知道std::vector 是否会明显
..
我需要按值而不是键对 std::map 进行排序.有什么简单的方法吗? 我从以下线程中得到了一个解决方案: std::map 按数据排序? 有更好的解决方案吗? map测试地图;//一些代码来生成地图中的值.排序(testMap.begin(),testMap.end());//有没有这样的函数来对地图进行排序? 解决方案 即使正确答案已经发布,我还是想添加一个演示,说明如何干
..