我已经告诉别人,编写using namespace std;
代码是错误的,我应该用std::cout
和std::cin
直接代替.
为什么被using namespace std;
认为是不好的做法?是低效还是冒着声明模糊变量(与名称std
空间中的函数具有相同名称的变量)的风险?它会影响性能吗?
我想做的就是检查一个元素是否存在于向量中,所以我可以处理每个案例.
if ( item_present )
do_this();
else
do_that();
Run Code Online (Sandbox Code Playgroud) 有人把这篇文章给我的注意,声称(我意译)的STL长期被误指整个C++标准库,而不是从SGI STL中采取的部分.
(...)它指的是"STL",尽管很少有人仍然使用STL(在SGI设计).
C++标准库的一部分基于STL的一部分,正是这些部分,许多人(包括几位作者和臭名昭着的错误记录的cplusplus.com)仍然称为"STL".但是,这是不准确的; 事实上,C++标准从未提及"STL",两者之间存在内容差异.
(...)"STL"很少用于指代恰好基于SGI STL的stdlib的位.人们认为这是整个标准库.它被放在简历上.这是误导.
我几乎不了解C++的历史,所以我不能判断文章的正确性.我应该避免使用术语STL吗?或者这是一个孤立的意见?
我有代码看起来像这样:
for (std::list<item*>::iterator i=items.begin();i!=items.end();i++)
{
bool isActive = (*i)->update();
//if (!isActive)
// items.remove(*i);
//else
other_code_involving(*i);
}
items.remove_if(CheckItemNotActive);
Run Code Online (Sandbox Code Playgroud)
我想在更新后立即删除非活动项目,以避免再次走过列表.但是如果我添加注释掉的行,当我到达时会出现错误i++
:"List iterator not incrementable".我尝试了一些替代品,它们没有在for语句中增加,但我无法得到任何工作.
当你走std :: list时,删除项目的最佳方法是什么?
C++ 11向量具有新功能emplace_back
.与push_back
依赖于编译器优化以避免副本的情况不同,emplace_back
使用完美转发将参数直接发送到构造函数以就地创建对象.在我看来,emplace_back
一切都push_back
可以做到,但有些时候它会做得更好(但从来没有更糟).
我有什么理由使用push_back
?
我正在练习使用多个文件和头文件等.所以我有这个项目需要两个数字,然后添加它们.很简单.
这是我的文件:
main.cpp中
#include <iostream>
#include "add.h"
int main()
{
int x = readNumber();
int y = readNumber();
writeAnswer(x + y);
return(0);
}
Run Code Online (Sandbox Code Playgroud)
io.cpp
int readNumber()
{
int x;
std::cout << "Number: ";
std::cin >> x;
return x;
}
void writeAnswer(int x)
{
std::cout << "Answer: ";
std::cout << x;
}
Run Code Online (Sandbox Code Playgroud)
add.h
#ifndef ADD_H_INCLUDED
#define ADD_H_INCLUDED
int readNumber();
void writeAnswer(int x);
#endif // #ifndef ADD_H_INCLUDED
Run Code Online (Sandbox Code Playgroud)
错误显示在io.cpp中.确切的错误是:
有谁知道为什么会这样?谢谢.
编辑:我昨天用相同数量的文件(2 .cpp和1.h)做了一个小项目,我没有在另一个.cpp中包含iostream标题,它仍然编译并运行正常.
在C++中是否可以用另一个字符串替换字符串的一部分?
基本上,我想这样做:
QString string("hello $name");
string.replace("$name", "Somename");
Run Code Online (Sandbox Code Playgroud)
但我想使用标准C++库.
有什么理由放弃std::allocator
支持自定义解决方案?您是否遇到过正确性,性能,可扩展性等绝对必要的情况?有什么非常聪明的例子吗?
自定义分配器一直是我不太需要的标准库的一个功能.我只是想知道SO上的任何人是否可以提供一些令人信服的例子来证明他们的存在.
我写了这个函数来从文件中读取一行:
const char *readLine(FILE *file) {
if (file == NULL) {
printf("Error: file pointer is null.");
exit(1);
}
int maximumLineLength = 128;
char *lineBuffer = (char *)malloc(sizeof(char) * maximumLineLength);
if (lineBuffer == NULL) {
printf("Error allocating memory for line buffer.");
exit(1);
}
char ch = getc(file);
int count = 0;
while ((ch != '\n') && (ch != EOF)) {
if (count == maximumLineLength) {
maximumLineLength += 128;
lineBuffer = realloc(lineBuffer, maximumLineLength);
if (lineBuffer == NULL) {
printf("Error reallocating space for …
Run Code Online (Sandbox Code Playgroud) 我的理解是它string
是std
命名空间的成员,为什么会出现以下情况呢?
#include <iostream>
int main()
{
using namespace std;
string myString = "Press ENTER to quit program!";
cout << "Come up and C++ me some time." << endl;
printf("Follow this command: %s", myString);
cin.get();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
每次程序运行时,都会myString
打印一个看似随机的3个字符的字符串,例如上面的输出.